1. ホーム
  2. laravel

LaravelのEloquent/Fluentで全ての行に同じ値を設定する方法とは?

2023-07-14 08:28:24

質問

データベースのすべての行を更新する必要があります。 すべて の特定のフィールドが一つの値に等しくなるように、データベースのすべての行を更新する必要があります。以下はその例です。

私のデータベースのテーブルがこのようなものだとします。

id データ 確定
1 いくつかのデータ 0
2 いくつかのデータ 1
3 いくつかのデータ 0

すべての行の確認済みフィールドを1にするクエリを実行したい。

このようにすればいいのですが

$rows = MyModel::where('confirmed', '=', '0')->get();
foreach($rows as $row) {
    $row->confirmed = 0;
    $row->save();
}

しかし、もっと良い方法があるように思えます。単一のクエリで、「すべての行の 'confirmed' フィールドを 1 に設定する」と言うだけです。

LaravelのEloquent/Fluentにそのようなクエリは存在しますか?

どのように解決するのですか?

まあ、簡単な答えですが、eloquentでは無理です。モデルはデータベースの1行を表すので、これを実装しても意味がないのです。

しかし、fluentでこれを実現する方法があります。

$affected = DB::table('table')->update(array('confirmed' => 1));

あるいはさらに良い

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1));