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()
,等等。
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()
,等等。