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?
3 Answers
First of all instead of:
$user->saveyou 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
2You 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
1Instead use update() to update the records...
$user = Auth::user();
$userUpdated = $user->update($request->all());
//Print number of updated rows...
print($userUpdated);This will show you the number of affected rows...
1