2017-12-13 10 views
1

私は、ユーザーが自分の名前を変更できるフォームを持つビューを持っています。フォームを送信した後、名前が変更されたかどうかを知る必要があります。 この結果、コード結果は常にfalse(変更なし)ですが、データベーステーブルは正しく更新されます。Laravel 5.5でフォームを送信した後にモデルが変更されたかどうかを確認する方法?

私のユーザモデルがあります:

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

    }); 
} 

私ProfileControllerは形式でデータを受信しました。オールウェイズユーザーにもかかわらず、「何のデータが変更されていない」GET $メッセージで

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); 
} 

は、フォーム内のデータを変更しました。

これが最善の方法であるかどうかわかりません。

ありがとうございました。

+0

はこの参考になりましたか? https://stackoverflow.com/questions/28866500/laravel-eloquent-update-just-if-changes-have-been-made – Alexey

+0

お役に立ちました、ありがとうございました – Fabian

答えて

2

hasChanged()メソッドが設定されている方法は、実際にはやりたいことをしていません。現在、あなたのコードでは、hasChanged()メソッドは、呼び出されるたびにオブジェクトが更新されているときのイベントハンドラを登録しています。つまり、hasChanged()は実際には何も返しませんが、長期的には不必要なオーバーヘッドがコードに多く追加されています。

あなたがしたいことは、コールをいくつかの部分に分割することです。あなたが電話をしたとき:

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

これはリクエストからの値をオブジェクトに入れて、それをすべて一度に保存することです。あなたがしたいのは、オブジェクトに値を入れてから、何か変更があったかどうかを確認してDBに保存することです。以上のようなものになります

$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); 
+0

正確に!それは完璧に動作します!あなたのお時間をありがとうございました。 – Fabian

関連する問題