2017-04-18 129 views
0

我有此路由: Route :: resource('my-account','ProfileController');Laravel 5.4更新方法不更新

我有這個方法在我的控制器:

public function update(Request $request, User $user) 
{ 
     DB::enableQuerylog(); 

     $user->update([ 
      'first_name' => $request->first_name, 
      'last_name' => $request->last_name, 
      'phone' => $request->phone 
     ]); 

     dd(\DB::getQuerylog()); 
} 

我有這樣的形式:

<form class="form" role="form" method="POST" action="{{ url('/my-account/'. $user->id) }}"> 

    {{ method_field('PATCH') }} 

    {{ csrf_field() }} 

    <div class="form-group" id="firstNameDiv"> 

     <label class="control-label">First Name</label> 

     <input type="text" class="form-control" name="first_name" value="{{ $user->first_name }}"> 

     <span class="help-block" id="firstNameError"></span> 

    </div> 

當我提交表單的名字沒有被更新表中。

如果我嘗試dd($ request-> first_name),我看到了我輸入的名稱。

數據庫日誌返回一個空數組,如下所示:[],它爲什麼不更新?

+0

你得到了什麼,如果你'DD($用戶)'?也許'$ user'實例不是你認爲的那樣? – ariestikto

回答

-1

嘗試將dd作爲您的方法中要執行的第一件事,以確保它被觸發。至少這就是我每次看起來沒有做任何事情時都會這樣做的方式。

接下來是,你爲什麼要做update沒有where?除非您想更新所有記錄,否則您的查詢中應該有where()

也順便說一句,不知道這個......應該不是在構造函數中注入模型嗎?

要麼嘗試這樣的事情

$user = User::find($id) // or in your case $user->find($id); 
$user->firstname = $request->input('firstname'); 
$user->save(); 

或者

$user->where('id', $id)->update(['firstname' => $request->input('firstname')]); 
+0

謝謝,但我在一個不同的模型/控制器中完全一樣,一切正常。用戶正在被髮送到我不需要在哪裏執行的方法。我把dd($ request)放在方法中,它向我顯示了包含所有字段和正確值的請求。 –

+0

你嘗試過'DB :: table('users')'嗎?如果可行,那麼你的雄辯代碼或雄辯的核心代碼就一定有問題。請嘗試使用查詢生成器進行檢查。 – jen

+0

對不起,但我需要在哪裏使用DB :: table('users'),爲什麼?事情是這與我有其他控制器正常工作。我改變了這一切發送一個$ id的方法,而不是$用戶,並做findOrFail等我只需要了解爲什麼此代碼不起作用,當它在其他地方工作 –

-1

如果你不使用表中的created_at和的updated_at你應該使用禁用它們: 公共$時間戳= FALSE;