我有一个用户可以更改姓名的表单。提交表单后,我需要知道名称是否已更改。 在这个问题上,代码结果始终为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中,尽管用户已经更改了表单中的数据,但总是得到“没有数据更改”。
我不知道这是否是最好的方法。
感谢您的帮助。
答案 0 :(得分:2)
设置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);