LoginSignup
7
7

More than 1 year has passed since last update.

【Laravel】SQL発行回数を減らす 〜複数レコードを一気にDBへ保存する方法〜

Last updated at Posted at 2021-06-09

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);



追記

ループ処理を使ってコードを短縮しました。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7