以前の記事で、Laravelを使用し、一つのインサートのクエリで複数のデータをインサートする方法を紹介しました。
Laravelを使用していて、複数条件でアップデート文を流したり、複数のカラムを一気にアップデートしたいという機会があると思います。
今回の記事では、複数条件で複数カラムのアップデートを一回のクエリで行う方法について紹介します。
Query Builderを使用する場合
//updateしたい値をの配列 $update = [ 'posts' => 1, 'threads' => 2, 'users' => 3, 'points' => 5, ]; //updateしたいpage_id $page_id_array =[1,2]; DB::table('my_table') ->whereIn('page_id', [1, 2]) ->update($update);
上記の例では、page_idが1と2のテーブルのデータを$updateに格納された配列の値にアップデートしています。
postsのカラムは、1、threadsのカラムは、2、usersのカラムは、3、pointsのカラムは、5にそれぞれアップデートしています。
これで、複数の条件で複数のカラムをアップデート出来ます。
次に、Eloquent ORMを使用して、複数条件で、複数カラムをアップデートする方法を紹介します。
Eloquent ORMを使用する場合
$update_column = [ 'colour' => 'black', 'size' => 'XL', 'price' => 10000 // Add as many as you need ]; $itemTypes = [1, 2, 3, 4, 5]; ItemTable::whereIn('item_type_id', $itemTypes) ->update($update_column);
上記の例では、item_type_idカラムが、$itemTypesの条件のレコードを$update_columnのカラムの情報にアップデートしています。
colourのカラムは、black、sizeのカラムは、XL、priceは、10000にアップデートをしています。
Query BuilderでもEloquent ORMを使用してもアップデートをする条件、アップデートしたいカラムは配列の値を増やすことでいくらでも増やせます。
今回の記事では、アップデートをする条件にwhereInメソッドを使用していますが、whereメソッドを使用して単一のアップデート条件を指定することももちろん可能です。
アップデートする条件を変えるたびに、アップデートの処理を繰り返すのは、冗長です。
一つの処理で、複数のアップデート条件で複数のカラムを一気にアップデートする方法は、Laravelをしようするならぜひ覚えておくと良いと思います。
[参考]
・Update multiple rows using Query Builder (1 query)
・Update multiple records using Eloquent