2016-07-24 6 views
3

Laravel DB update関数は0を返します。Laravel DB ::更新のみを返す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

'if else'を使うのではなく、' try catch'や 'DB transaction'を使ってこのようなことをするべきです。 – 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 

再び同じクエリを実行し、名前がすでにTesting

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

更新加えであるとして、それは0影響を受けた行を返すわかります。だからあなたのためにそれが良いかもしれない

ユーザーがUser::findOrFail($id)のいずれかであるかどうかを確認するか、またはUser::find($id)の戻り値を確認して、ユーザーが存在する場合は、 $user。存在しないユーザーの場合は同じ0が返され、ユーザーが設定しようとしている場合はユーザーの詳細が既に表示されている場合は、より明示的です。

+0

はい私は、ユーザーが存在しているかどうかをチェックし、エラーが発生した場合はcatchブロックを試してみることをお勧めします –

関連する問題