Laravelで複数レコードを保存する際、一度のSQL発行で処理する方法を考える。
現状は4つのレコードを保存する為に、4回SQLを発行している。
コードは以下の通り。
RoomController.php
//1人目
$room_player_1 = RoomPlayer::create([
"name" => null,
"room_id" => $room_id,
"user_id" => 1,
]);
//2人目
$room_player_2 = RoomPlayer::create([
"name" => null,
"room_id" => $room_id,
"user_id" => 2,
]);
//3人目
$room_player_3 = RoomPlayer::create([
"name" => null,
"room_id" => $room_id,
"user_id" => 3,
]);
//4人目
$room_player_4 = RoomPlayer::create([
"name" => null,
"room_id" => $room_id,
"user_id" => 4,
]);
これを一度のSQL発行で処理するには、以下のようにデータを配列に格納し、insert( )で保存する。
※ちなみに、save(), create() で複数データをテーブルに格納する場合, foreach() 等で繰り返し処理をする必要がある。
RoomController.php
$players = [
["name" => null, "room_id" => $room_id, "user_id" => 1],
["name" => null, "room_id" => $room_id, "user_id" => 2],
["name" => null, "room_id" => $room_id, "user_id" => 3],
["name" => null, "room_id" => $room_id, "user_id" => 4]
];
$save_players = RoomPlayer::insert($players);
追記
ループ処理を使ってコードを短縮しました。