Php 如何知道在Laravel 5.5中提交表格后模型是否发生了变化?

Php 如何知道在Laravel 5.5中提交表格后模型是否发生了变化?,php,laravel,Php,Laravel,我有一个表单视图,用户可以在其中更改其名称。提交表格后,我需要知道姓名是否已更改。 此时,代码结果始终为false(无更改),但数据库表已正确更新 我的用户模型有: protected static function hasChanged() { self::updating(function($user){ if($user->isDirty()) { return true; }else {

我有一个表单视图,用户可以在其中更改其名称。提交表格后,我需要知道姓名是否已更改。 此时,代码结果始终为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); 

这有用吗?这很有帮助,谢谢你!它工作完美!非常感谢您抽出时间。