Laravel 拉拉维尔雄辩群众协会
我有一个表Laravel 拉拉维尔雄辩群众协会,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有一个表avail\u requests,它有两个外键avail\u id和user\u id。创建可用性。然后向系统中的每个用户发送该可用性的请求。假设我有10个用户,那么在发送请求后,表avail\u requests应该有10行,它们的avail\u id都是相同的,user\u id就是10个用户id 我怎样才能直接与Laravel建立这种联系?显然,我可以循环访问所有用户,并按如下方式执行此操作: // Assuming $users contains the Collection
avail\u requests
,它有两个外键avail\u id
和user\u id
。创建可用性。然后向系统中的每个用户发送该可用性的请求。假设我有10个用户,那么在发送请求后,表avail\u requests
应该有10行,它们的avail\u id
都是相同的,user\u 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();
}
有没有一种更简单的方法不涉及循环?因为
avail\u requests
是一个数据透视表,将用户
与可用性
链接在一起,所以您可以利用belongstomy
关系
因此,建立这种关系:
// 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
它是一个仅用于透视表的模型,还是您真的需要它(即,它也保存其他数据?)它也保存其他数据。它不仅仅是一个数据透视表,它与本例相关吗?或者这就是您想要执行的所有代码?因为除了外键,没有别的了。创建请求只是外键分配。当用户与请求交互时,这些行的默认列值会随之更改。因此,您可以在
用户
和可用性
之间设置归属
关系,然后调用同步($ids,false)
-第二个参数以避免分离。请注意,它将在引擎盖下运行相同的循环。否则,对单个查询使用DB::table(..)->insert(..)
。