【问题标题】:How to know if model has changed after submit a form in Laravel 5.5?在 Laravel 5.5 中提交表单后如何知道模型是否发生了变化?
【发布时间】:2018-05-27 18:51:36
【问题描述】:

我有一个表单视图,用户可以在其中更改其姓名。提交表格后,我需要知道名称是否已更改。 此时,代码结果始终为 false(未更改),但数据库表已正确更新。

我的用户模型有:

   protected static function hasChanged()
{
    self::updating(function($user){
      if($user->isDirty())
      {
            return true;
      }else
      {
          return false;
      }

    });
}

我的 ProfileController 收到了表单中的数据。

    public function updateProfile(Request $request)
{
    $usuario = new User;
    User::find(Auth::user()->id)->update($request->all());
    $message = User::hasChanged() ? "Data changed" : "No data changed";
    return redirect('home')->with('success', $message); 
}

在 $message 中总是得到“没有数据改变”,尽管用户已经改变了表单中的数据。

我不知道这是否是最好的方法。

谢谢你的帮助。

【问题讨论】:

标签: php laravel


【解决方案1】:

你设置 hasChanged() 方法的方式,实际上并没有做你想做的事。当前,在您的代码中,hasChanged() 方法正在注册一个事件处理程序,用于在每次调用对象时进行更新。这意味着 hasChanged() 实际上根本不会返回任何内容,但从长远来看,它会给您的代码增加大量不必要的开销。

您需要做的就是将您的通话分成几个部分。当你打电话时:

->update($request->all());

这就是将请求中的值放入对象中,然后一次性保存。您要做的是将值放入对象中,然后检查是否有任何更改,然后将其保存到数据库中。

看起来更像这样:

$user = User::find(Auth::user()->id);
$user->fill($request->all());
$message = $user->isDirty() ? "Data changed" : "No data changed";
$user->save();
return redirect('home')->with('success', $message); 

【讨论】:

  • 没错!它完美无缺!非常感谢您的宝贵时间。
猜你喜欢
  • 2011-08-16
  • 2011-02-01
  • 2021-12-09
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
相关资源
最近更新 更多