2014-09-22 5 views
0

У меня есть таблица avail_requests, которая имеет два внешних ключа avail_id и user_id. Будет создана доступность. Затем запрос отправляется для этой доступности каждому пользователю в системе. Скажем, у меня 10 пользователей, поэтому после отправки запроса таблица avail_requests должна иметь 10 строк, причем все их avail_id являются одинаковыми, а user_id - это 10 идентификаторов пользователей.Laravel Eloquent - массовое объединение

Как это сделать непосредственно с 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

Является ли это моделью для сводной таблицы только, или вам это действительно нужно (т.е. он содержит и другие данные?) –

+0

Он содержит и другие данные. Это не просто сводная таблица. – Kousha

+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