繁体   English   中英

在Laravel 5.5中提交表单后,如何知道模型是否已更改?

[英]How to know if model has changed after submit a form in Laravel 5.5?

我有一个带有用户可以更改其名称的表单的视图。 提交表格后,我需要知道名称是否已更改。 此刻,代码始终会返回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中始终获得“无数据更改”。

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

谢谢你帮我

设置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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM