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

Ada*_*dam 3 php laravel eloquent laravel-5 laravel-5.5

有没有一种简单的方法让Eloquent save方法检查一行是否实际发生了变化?类似affected_rows的口才?

我发现的唯一解决方法是来自Laravel Eloquent更新,只要进行了更改:

$user = Auth::user();

$timestamp = $user->updated_at;

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

$user->save();

if($timestamp == $user->updated_at){
   // row was not updated.
}
Run Code Online (Sandbox Code Playgroud)

但是,如果不需要$timestep变量和检查,这可能会更短吗?我不想在每个控制器中重复那个逻辑.

我正在寻找这样的东西:

$user = Auth::user();

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

if($user->save()){
   // row was updated.
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不因为工作$user->save的回报true在这两种情况下.还有另外一种方法吗?

Mar*_*łek 10

首先代替:

$user->save
Run Code Online (Sandbox Code Playgroud)

你应该使用:

$user->save();
Run Code Online (Sandbox Code Playgroud)

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

if ($user->wasChanged()) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这是我在Laravel 5.5中记得的

  • 是的谢谢我纠正了。我尝试过并且有效。必须在 `$user->wasChanged()` 之前调用 `$user->save()`。 (2认同)
  • @Adam是的,您通常运行“$user->save()”,然后可以运行“$user->wasChanged()”来验证它是否已更改。如果您想验证更改的内容,您还可以使用方法“getChanges()” (2认同)