Laravelで一つのクエリで複数のレコードをインサートする方法

シェアする

フリーランスエンジニアの収入例を見てみる→フリーエンジニア高額案件多数【ギークスジョブ】

複数条件・複数カラムのアップデートについても紹介しましたが、Laravelを使用していて、複数のレコードをインサートする際にどの様にしていますか?

Laravel5で複数条件・複数カラムのアップデートを一回のクエリで行う方法について紹介しています。

いちいちforeachで回して、saveメソッドでsaveしていたりするのであれば、一つのクエリで複数のレコードを一気にインサートできるというのを知っていた方が、ソースが綺麗になるかも知れません。

やり方は、Eloquent ORMでもQuery Builderを使用しても簡単です。

$data = array(
    array('user_id'=>'1', 'subject_id'=> 4096),
    array('user_id'=>'2', 'subject_id'=> 2048),
    //...
);

Model::insert($data); // Eloquentでの方法
DB::table('table')->insert($data); // Query Builderでの方法

インサートしたい値の連想配列を作成して、その配列をEloquentでもQuery Buildelに与えてインサートすれば、複数のレコードを一つのクエリでインサートすることが出来ます。

この複数のレコードを一つのレコードでインサートするのは、例えば、下記の例の場合、有効です。

$query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

このクエリの結果は、下記の様な結果だとします。

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

上記のEloquentの結果の$queryをinsertメソッドの引数として与えてあげれば、わざわざforeachで回さなくても一つのクエリで複数のレコードをインサートすることが出来ます。

Laravelを使用した際、ソースをなるべく短く、簡略化するために知っておくと良い知識だと思います。

[参考]
Insert multiple records in one query
How to insert multiple rows from a single query using eloquent/fluent

シェアする

フォローする