【发布时间】:2021-03-18 00:50:23
【问题描述】:
我正在尝试了解一些高级的 eloquent 命令,在 Laravel 官方文档中,我找不到任何关于 updateExistingPivot 方法的提及。
有人可以通过一个简单的例子来帮助我理解它吗?
【问题讨论】:
我正在尝试了解一些高级的 eloquent 命令,在 Laravel 官方文档中,我找不到任何关于 updateExistingPivot 方法的提及。
有人可以通过一个简单的例子来帮助我理解它吗?
【问题讨论】:
经过一番进一步的研究,我找到了我的问题的答案。
Eloquent updateExistingPivot() 方法的目的也是更新多对多关系的数据透视表上的额外属性。
此方法接受数据透视记录外键和要更新的属性数组。
例如,如果我们有一个 User-Message 多对多关系,其中:
/app/User.php
public function messages()
{
return $this->hasMany(Message::class);
}
/app/Message.php
public function users()
{
return $this->hasMany(User::class);
}
如果每条消息已发送给用户,我们希望记录其状态。
所以我们在数据透视表中定义了一个状态属性。
数据透视表user_message:
当消息发送给特定用户时,我可以通过这种方式将状态设置为“已发送”:
$user = User::find(1);
$messageId = 2;
$user->messages()->updateExistingPivot($messageId, ['status' => 'sent']);
这将使用 user_id=1 和 message_id=2 将状态属性设置为“已发送”来更新数据透视表行。
【讨论】: