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
。还有另一种方式吗?
答案 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()
等。
答案 2 :(得分:0)
而是使用update()
来更新记录......
$user = Auth::user();
$userUpdated = $user->update($request->all());
//Print number of updated rows...
print($userUpdated);
这将显示受影响的行数...