当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩的更新只是如果已作出更改

濮泳
2023-03-14

是否有任何方法可以使用雄辩的模型来更新Laravel中的记录,只要对该记录进行了更改?我不希望任何用户无正当理由反复请求数据库,只是点击按钮保存更改。我有一个javascript函数,可以根据页面中是否有更改来启用和禁用save按钮,但我想知道是否可以确保在服务器端也执行这种功能。我知道我可以通过检查记录是否有变化来自己完成它(意思是:不需要借助框架的内部功能),但在这样做之前,我想知道Laravel eloquent model是否已经解决了这个问题,所以我不需要重新发明轮子。

这是我用来更新记录的方式:

$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();

共有3个答案

谢泽语
2023-03-14

我喜欢添加这个方法,如果你使用的是编辑表单,你可以使用这个代码来保存你的更新(请求$请求,$id)函数中的变化:

$post = Post::find($id);    
$post->fill($request->input())->save();

请记住,您必须使用相同的列名来命名输入。填充()函数将为您完成所有工作:)

穆英飙
2023-03-14

您可以使用$product-

上官扬
2023-03-14

你已经在做了!

将检查模型中的某些内容是否已更改。如果没有,它就不会运行db查询。

以下是illumb\Database\elount中代码的相关部分\Model@performUpdate

protected function performUpdate(Builder $query, array $options = [])
{
    $dirty = $this->getDirty();

    if (count($dirty) > 0)
    {
        // runs update query
    }

    return true;
}

getDirty()方法简单地将当前属性与创建模型时保存在原始中的副本进行比较。这是在sync原始()方法中完成的:

public function __construct(array $attributes = array())
{
    $this->bootIfNotBooted();

    $this->syncOriginal();

    $this->fill($attributes);
}

public function syncOriginal()
{
    $this->original = $this->attributes;

    return $this;
}

如果要检查模型是否脏,只需调用isDirty()

if($product->isDirty()){
    // changes have been made
}

或者如果你想检查某个属性:

if($product->isDirty('price')){
    // price has changed
}
 类似资料:
  • 问题内容: 插入新记录或更新(如果存在)的快捷方式是什么? 问题答案: 这是“ lu cip”正在谈论的完整示例: 以下是Laravel最新版本上的文档更新链接 此处的文档:更新的链接

  • 我目前正在学习Laravel和Elotent,并且已经建立了一些初始迁移。我的一个表只需要一个创建时间,因为一旦在其中插入一行,它将永远不会被更新: 我理解,Eloquent在默认情况下希望出现在上创建的上更新的

  • 使用Laravel的雄辩模型,我如何在访问对象时更新对象的数据,如果它已经 我有另一个API,我想确保数据是半最新的,但想缓存在我的数据库中的数据,而不是调用他们的API每次页面加载。 是否有Laravel在每次加载模型时调用的函数,我可以检查30天是否已经过去,调用API加载新数据,然后保存它?

  • 我在我的网站上有两步注册,我正在尝试更新数据栏中的用户信息数据。第一步是用户名和姓氏,第二步我尝试在JSON列中插入额外的数据。这是我的第二步更新: 但是这覆盖了我在第一步插入的旧数据。

  • 问题内容: 我正在使用Eloquent进行数据库处理,当我使用更新方法更新记录时,时间戳被更改了,如何防止这种情况发生? 时间戳工作正常 问题答案: 如果您的模型中没有任何自定义设置。您可以像这样更新记录: 仅应使用此代码更新时间戳(而不是)。如果还进行了更新,则意味着您可能具有一些自定义模型设置,或者: 您可能具有数据库触发器,这些触发器在记录更新时会发生变化 您可能已经注册了一些事件,这些事件

  • 我有一个表:配置文件表有一个外键和主键。我想更新行基于两个条件。id==1和user=='admin' 如何使用两个参数更新查询使用雄辩。