Learn or Die

生涯勉強。Macです。

Eloquentのsaveとupdateは処理が異なる

saveとupdateのちがい

update()は更新データとの差分を見ずに更新する。
save()は更新データとの差分を見て更新するかを決める。

例)Customerテーブルのnameを更新する
update()を使用した場合

<?php

Customer::where('id', 1)
          ->update(['name' => $request->name]);

save()を使用した場合

<?php

$customer = Customer::find(1)
$customer->name = $request->name;
$customer->save();

もし$request->nameが既存データと同じだった場合、
save()→updated_atが更新されない
update()→updated_atが更新される

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.phpのsaveメソッドを確認すると、データが存在している場合のみ、updateが実行されていることがわかる。