是否有任何方法可以使用 eloquent 模型更新 Laravel 中的记录,只要对记录进行了更改?我不希望任何用户一遍又一遍地无缘无故地请求数据库,只需点击按钮即可保存更改。我有一个 javascript
功能,可以根据页面中是否发生更改来启用和禁用保存按钮,但我想知道是否可以确保在服务器端执行这种功能也。我知道我可以自己完成它(意思是:不诉诸框架的内部功能)只需检查记录是否有变化,但在这样做之前,我想知道 Laravel eloquent 模型是否已经处理好了那,所以我不需要重新发明轮子。
这是我用来更新记录的方式:
$product = Product::find($data["id"]);
$product->title = $data["title"];
$product->description = $data["description"];
$product->price = $data["price"];
//etc (string values were previously sanitized for xss attacks)
$product->save();
原文由 user2755140 发布,翻译遵循 CC BY-SA 4.0 许可协议
你已经在做!
save()
将检查模型中的某些内容是否发生了变化。如果没有,它将不会运行数据库查询。这是
Illuminate\Database\Eloquent\Model@performUpdate
中代码的相关部分:getDirty()
方法只是将当前属性与创建模型时保存在original
中的副本进行比较。这是在syncOriginal()
方法中完成的:如果要检查模型是否脏,只需调用
isDirty()
:或者,如果您想检查某个属性: