Is there a simple way for the Eloquent save method to check if a row has actually changed? Something like affected_rows
for Eloquent?
The only workaround that I found was from Laravel Eloquent update just if changes have been made to do:
$user = Auth::user();
$timestamp = $user->updated_at;
$user->title = $request->input('title');
....
$user->save();
if($timestamp == $user->updated_at){
// row was not updated.
}
But is this possible to find this out shorter, without the need of a $timestep
variable and the check? I don't want to repeat that logic in every controller.
I am looking for something like this:
$user = Auth::user();
$user->title = $request->input('title');
....
if($user->save()){
// row was updated.
}
But this does not work since $user->save
returns true
in both cases. Is there another way?
First of all instead of:
$user->save
you should rather use:
$user->save();
And to verify if anything was changes in latest Laravel you can use:
if ($user->wasChanged()) {
// do something
}
but be aware this is as far as I remember in Laravel 5.5
You could also skip the save altogether and check if your model ->isDirty()
, before calling ->save()
at all.
// ...
$user->title = $request->input('title');
if ($user->isDirty()) {
$user->save();
}
Besides isDirty()
, you also have isClean()
, and more.
Check out: HasAttributes trait
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With