SQL一覧

Laravelで複数条件・複数カラムのアップデートを一回のクエリで行う方法

以前の記事で、Laravelを使用し、一つのインサートのクエリで複数のデータをインサートする方法を紹介しました。

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