Laravelで複数レコードを一括で更新する

Laravelロゴ

Laravelで1度のQueryで複数のレコードを一括で更新したい時は,upserts()メソッドを使います。

Flight::upsert([
['departure' => 'Oakland', 'destination' => 'San Diego', 'price' => 99],
['departure' => 'Chicago', 'destination' => 'New York', 'price' => 150]
], ['departure', 'destination'], ['price']);

第1引数に配列
第2引数に検索キー
第3引数に変更したいカラム
を指定します。

updateOrCreate()と似たような使い方になります。
更新日付なども自動で付加されます。
ただし、updateは個別に行われるようで、1レコードづつ複数のQueryに分かれてしまうためスピードが速いわけではありません。
メモリの節約を考えれば、ループで1レコードずつ処理しても良いような気がします。

ちなみに
1回のQueryで複数レコードの更新を同時に行うバルクアップデートはLaravelにはないらしいです。
バルクインサートはinsertメソッドでできるようですが、タイムスタンプが付かないなどいろいろ面倒な点が多いようです。

タイトルとURLをコピーしました