web-dev-qa-db-ja.com

LaravelのEloquent / Fluentですべての行を同じ値に設定するにはどうすればよいですか?

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

私のデータベーステーブルは次のようなものだとしましょう:

id    |   data   |  confirmed
1     | someData |      0
2     | someData |      1
3     | someData |      0

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

私はこのようにすることができました:

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

しかし、より良い方法があるように思えますか? 「すべての行の「確認済み」フィールドを1に設定する」と言う単一のクエリ。

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

33
Pete

まあ、簡単な答え:いいえ、雄弁ではできません。モデルはデータベース内の1つの行を表しますが、これを実装しても意味がありません。

ただし、流thisにこれを行う方法があります。

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

またはさらに良い

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

このスレッドを最新に保つために、Eloquentモデルに対してすべての行を直接更新するには、次を使用します。

Model::query()->update(['confirmed' => 1]);
56
Matt

あなたは雄弁でこれを行うことができます(laravel 4):

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1])
18
styryl