通过关联模型修改分析together()方法

发布时间:2022-12-10浏览次数:730 次
经常在我们使用ThinkPHP的together()方法时,会有很多疑惑,如到底要不要指定子属性,通过举例在ThinkPHP一对一关联模型修改中,如需修改一条数

经常在我们使用ThinkPHP的together()方法时,会有很多疑惑,如到底要不要指定子属性,通过举例在ThinkPHP一对一关联模型修改中,如需修改一条数据,可以使用如下的方法:

方法一:

$article = Article::find(1);
$article->detail->content = "新内容";
$res = $article->together(['detail'])->save(); // 未指定子属性

方法二:

$article = Article::with('detail')->find(9); // 使用了with()预载入查询
$data = ['content'=>'新内容'];
$res = $article->data($data)->together(['detail'=>['content']])->save(); // 需指定子属性

需要注意的是:方法二中使用了with()预载入查询,如果不使用with(),我们也可以在查询到数据之后,对数据进行一次toArray(),如:

$article = Article::find(9);// 未使用with()
$article->toArray(); //使用toArray()方法
$data = ['content'=>'新内容'];
$res = $article->data($data)->together(['detail'=>['content']])->save();

使用这两种方式都可以达到修改关联数据的目的,区别在于方法一中,未对关联属性指定子属性,方法二中指定了子属性。原因在于:方法一中,已在$article->detail->content中明确了子属性,故不需要也不能指定。

因为关联删除时都需要使用到with()方法,且一般而言,大家都不太喜欢手动整理数据,所以我们更推荐使用第二种方法来更新数据。总的来说。ThinkPHP的文档还是相当混乱的。

扫一扫,在手机上查看