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

时间:2017-11-05 10:58:11

标签: php laravel laravel-5 eloquent laravel-5.5

Eloquent save method是否有一种简单的方法可以检查行是否实际发生了变化? Eloquent的affected_rows之类的东西?

我找到的唯一解决方法是Laravel Eloquent update just if changes have been made来做:

$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在两种情况下都会返回true。还有另一种方式吗?

3 个答案:

答案 0 :(得分:8)

首先代替:

$user->save

你应该使用:

$user->save();

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

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

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

答案 1 :(得分:2)

在完全致电->isDirty()之前,您也可以完全跳过保存并检查您的模型->save()

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

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

isDirty()外,您还有isClean()等。

退房:HasAttributes trait

答案 2 :(得分:0)

而是使用update()来更新记录......

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

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

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