Laravel: 如何验证模型是否已更改

Laravel: How to verify if model was changed

Eloquent save method 是否有一种简单的方法来检查某行是否已实际更改? Eloquent 的 affected_rows 之类的东西?

我发现的唯一解决方法是

$user = Auth::user();

$timestamp = $user->updated_at;

$user->title = $request->input('title');
....

$user->save();

if($timestamp == $user->updated_at){
   // row was not updated.
}

但是是否可以在不需要 $timestep 变量和检查的情况下更短地找到它?我不想在每个控制器中重复该逻辑。

我正在寻找这样的东西:

$user = Auth::user();

$user->title = $request->input('title');
....

if($user->save()){
   // row was updated.
}

但这不起作用,因为在这两种情况下 $user->save returns true。还有别的办法吗?

首先代替:

$user->save

你应该使用:

$user->save();

要验证最新 Laravel 中是否有任何更改,您可以使用:

if ($user->wasChanged()) {
    // do something
}

但请注意,这是我在 Laravel 5.5

中所记得的

改为使用update()更新记录...

$user = Auth::user();
$userUpdated = $user->update($request->all());

//Print number of updated rows...
print($userUpdated);

这将显示受影响的行数...

您也可以完全跳过保存并检查您的模型 ->isDirty(),然后再调用 ->save()

// ...
$user->title = $request->input('title');

if ($user->isDirty()) {
    $user->save();
}

除了isDirty(),你还有isClean(),等等。

查看:HasAttributes trait