【问题标题】:Laravel 5.6 - Only save value if it has changedLaravel 5.6 - 仅在更改时才保存值
【发布时间】:2018-07-03 21:06:14
【问题描述】:

我有一个 Laravel 5.6 项目,正在尝试从这样的表单更新帖子

<input name="email" type="text" class="form-control" placeholder="Email" value="{{$user->email}}" required>

在我的 PostsController 我有这个...

    if($request->input('email')) {
        $user->email = $request->input('email');
    }

我希望它仅在表单中输入了新电子邮件时才更新电子邮件,但因为我预先填充了表单字段,它总是通过 IF。

有没有更多的 Laravel 方法来做到这一点?我看过 isDirty() 但我不确定它是否正确使用。

【问题讨论】:

  • if($request-&gt;input('email') &amp;&amp; $user-&gt;email != $request-&gt;input('email'))有问题吗?
  • 你可以设置这个值在你的数据库中是唯一的并验证它
  • 是的,你可以使用 isDIrty() 函数。
  • 只有新值才保存,你想做什么?您已经在更新模型,并且电子邮件值不会改变,因为它是相同的值。

标签: php laravel laravel-5


【解决方案1】:

save() 方法将检查模型中的某些内容是否已更改。如果没有更改,它将不会运行数据库查询。因此,您无需为此显式编写代码。 不过如果你想使用 isDirty 方法,你可以写如下

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

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

if($test->isDirty('email')){
   // email has changed
}

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多