2014-09-22 88 views
0

我有一个表avail_requests,它有两个外键avail_iduser_id。可用性已创建。然后向该系统中的每个用户发送该可用性的请求。假设我有10个用户,所以发送请求后,表avail_requests应该有10行,其中所有的avail_id都是相同的,而user_id是10个用户标识。Laravel Eloquent - Mass Association

我该如何直接与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

它是数据透视表的模型只有,还是你真的需要它(即。它也包含其他数据?) – 2014-09-22 20:39:20

+0

它也包含其他数据。这不仅仅是一个数据透视表。 – Kousha 2014-09-22 20:40:18

+0

但是在这种情况下它有意义还是这是你想要执行的所有代码?除了外键外,没有其他什么了。 – 2014-09-22 20:45:46

回答

1

由于avail_requests是连接usersavailabilites的数据透视表,因此您可以利用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