【发布时间】:2016-01-06 18:00:13
【问题描述】:
在 Laravel 中,我有一个用户表和一个通知表,它们是多对多关系。每个通知都发给一组用户,每个用户都可以将通知单独标记为已读。中间表 (notice_user_map) 有一个“读取”列。
我正在尝试创建“将所有内容标记为已读”功能,但无法通过 Eloquent 看到如何做到这一点。这是基本代码:
$notices = $user->notices()
->where('read', 0)
->get();
foreach ($notices as $notice) {
$notice->pivot->read = 1;
}
$authUser->notices()->saveMany($notices);
因此,这会找到该用户的所有未读通知并循环访问它们,在中间(数据透视表)上设置“读取”属性。但是最后一行给出了错误
传递给 Illuminate\Database\Eloquent\Relations\BelongsToMany::saveMany() 的参数 1 必须是数组类型,给定对象
如果我手动创建一个数组,我会得到这个错误:
违反完整性约束:1062 键“notice_user”的重复条目“4293672207-2904708423”(SQL:插入
notice_user_map(created_at,notice_id,updated_at,user_id)值(2016-01 -06 17:53:39, 4293672207, 2016-01-06 17:53:39, 2904708423))
我也无法像$authUser->notices()->pivot 这样访问数据透视表。
在数据透视表中大量保存数据的正确方法是什么?
【问题讨论】:
标签: php mysql laravel eloquent many-to-many