我有一个表avail_requests
,它有两个外键avail_id
和user_id
。可用性已创建。然后,将该可用性的请求发送给系统中的每个用户。假设我有10个用户,因此在发送请求后,表avail_requests
应该有10行,其中avail_id
的所有内容都相同,而user_id
是10个用户ID。
如何直接与Laravel建立联系?显然,我可以遍历所有用户并执行以下操作:
// Assuming $users contains the Collection of all users
// Assuming $avail is the availability Collection
foreach ($users as $user)
{
$request = new AvailRequest();
$request->avail()->associate($avail);
$request->user()->associate($user);
$request->save();
}
是否有更简单的方法不涉及循环?
答案 0 :(得分:1)
由于avail_requests
是将users
与availabilites
相关联的数据透视表,因此您可以利用belongsToMany
关系。
所以创建这种关系:
// I assume Availability is the model name
public function users()
{
return $this->belongsToMany('User', 'avail_requests', 'avail_id', 'user_id');
}
然后你可以致电sync
为你完成这项工作:
$avail = Availability::find($someId);
$avail->users()->sync($usersIds, false); // 2nd param to false so it won't detach anything
其他解决方案可能是最简单的方法:
$ids; // array of availability and users ids
DB::table('avail_requests')->insert($ids); // runs single insert query