間違っていたら訂正してください。Eloquent モデルでは大量更新というものはないと思います。
行ごとにクエリを発行せずに DB テーブルを一括更新する方法はありますか?
例えば、次のような静的メソッドがあるでしょうか
User::updateWhere(
array('age', '<', '18'),
array(
'under_18' => 1
[, ...]
)
);
(はい、これは馬鹿げた例ですが、イメージはつかめると思います...)
なぜこのような機能が実装されていないのでしょうか? このような機能が登場したらとても嬉しいと思うのは私だけでしょうか?
私 (開発者) は、次のように実装することは好みません:
DB::table('users')->where('age', '<', '18')->update(array('under_18' => 1));
なぜなら、プロジェクトが拡大するにつれて、将来プログラマーにテーブル名の変更を要求する可能性があり、プログラマーがテーブル名を検索して置換することができなくなるからです。
この操作を実行するための静的メソッドはありますか? ない場合は、Illuminate\Database\Eloquent\Model
クラスを拡張してそのような操作を実行できますか?
ベストアンサー1
おそらく数年前にはこれは不可能だったでしょうが、Laravel の最近のバージョンでは確実に実行できます。
User::where('age', '<', 18)->update(['under_18' => 1]);
を呼び出す前に where メソッドが必要であることに注意してくださいupdate
。