我在用户模型和通知模型上有多对多的关系。
要创建通知并附加到许多用户,我目前正在做:
$users = User::all();
$notification = new Notification(['title'=>'some title', 'body'=>'notification body']);
$notification->save();
foreach ($users as $user) {
$user->notifications()->attach([$notification->id]);
}
如果$users->count()
成为一个非常大的数字,那么foreach实现将不是理想的;
如果没有这么多循环,请有更好的方法来完成这项工作吗?
由于
答案 0 :(得分:1)
没有,没有使用Eloquent。
同时存在attach
多个记录的功能,但内部使用循环本身,因此您不会在那里进行任何保存。
$notification->users()->attach([
1 => [],
2 => [],
// ...
]);
在处理大型结果集时,Eloquent不一定是理想的解决方案。您可以考虑使用数据库查询构建器甚至原始SQL来处理批量插入操作。
答案 1 :(得分:1)
见这里:https://laravel.com/docs/5.4/eloquent-relationships#updating-many-to-many-relationships
您可以将id数组传递给attach()
方法,如下所示:
$user_ids = User::pluck('id');
$notification = new Notification(['title'=>'some title', 'body'=>'notification body']);
$notification->save();
$notification->users()->attach($user_ids);
假设您$notification
的关系当然叫users()
答案 2 :(得分:0)
$users = User::all();
$notification = Notification::create([
'title'=>'some title',
'body'=>'notification body'
]);
$notification->user()->attach($users);