0
0

結論

users テーブルのモデル User に対し、 status = 0 の行の emailnull に更新する時の例。

$query = User::where('status', '=', 0); // 対象の検索条件
$query->getModel()->timestamps = false; // これにより updated_at の自動更新をとめる
$query->update(['email' => null]); // 更新

バッチなどで一括更新したいが、更新日を変更したくない時に使う。

別解

Eloquent ではなく Query\Builder を使う場合

updated_at は自動更新されない。

DB::table('users')
    ->where('status', '=', 0)
    ->update(['email' => null]);

対象を全部取得してループ

効率が悪いので非推奨。

$users = User::where('status', '=', 0)->get();
foreach ($users as $user) {
    $user->timestamps = false;;
    $uesr->update(['email' => null]);
}

補足

$model->timestamps = false にすると、updated_at の自動更新をしなくなる。
bulk update の場合、モデルのインスタンスがコード中に出現しないので、 getModel() で取得する必要がある。

対象を全部取得してループ のケースでは、1件ずつモデルのインスタンスが生成されているので、それぞれ設定して更新を行っている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0