2016-07-24 64 views
3

Laravel DB update函數返回0,如果查詢失敗或者行因爲更新值相同而不受影響。Laravel DB :: update僅返回0或1

如何檢查查詢是否因錯誤或因行不受影響而失敗?在下面的代碼中,如果值相同,它將返回並且不會運行控制器中的下一組代碼。

$query = DB::table('users') 
          ->where('id', '=' , $requestdata['user_id']) 
          ->update([ 
           'first_name' => $requestdata['user_fname'], 
           'last_name' => $requestdata['user_lname'], 
           ]); 

     if (!$query) { 
      return ['error' => 'error update user']; 

     } 
+1

你應該使用'try catch'或'DB transaction'來做這種事情,而不是使用'if else'。 – Avishek

回答

4

更新查詢返回受更新查詢影響的行數。

$returnValue = DB::table('users') 
->where('id', '=', $data['user_id']) 
->update([ 
    'first_name' => $data['user_fname'], 
    'last_name' => $data['user_lname'], 
]); 

因此,上述將返回更新記錄的數量。 0表示沒有記錄被更新。

但是,對於您來說,即使0已返回,它也可能不表示錯誤,因爲它僅表示沒有記錄更新。因此,如果您嘗試使用實際已包含的詳細信息更新用戶的姓名和姓氏,則查詢將返回0

有用的附註,玩php artisan tinker,即。

>>> $retval = DB::table('users')->where('id', 1)->update(['first_name' => 'Testing']); 
=> 1 

再次運行相同的查詢,你會發現它返回0受影響的行的名稱已Testing

>>> $retval = DB::table('users')->where('id', 1)->update(['first_name' => 'Testing']); 
=> 0 

更新除了

所以你可能會更好首先檢查用戶是否存在User::findOrFail($id)或只檢查User::find($id)的回報,然後如果用戶存在,則在ret上進行有條件更新請致電$user。更明確的是,更新對於不存在的用戶返回相同的0,並且如果用戶詳細信息已經在您試圖設置的位置。

+0

是的,我認爲它首先檢查用戶是否存在,並且錯誤使用try catch塊 –

相關問題