Laravel DB :: update仅返回0或1

时间:2016-07-24 11:11:53

标签: database laravel

如果查询失败或者因为更新值相同而没有影响该行,则Laravel DB update函数返回0。

如何检查查询是否由于错误或因为行没有受到影响而失败?在下面的代码中,如果值相同,它将返回并且不会运行控制器中的下一组代码。

 $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']; 

        }

4 个答案:

答案 0 :(得分:7)

更新查询返回受更新查询影响的行数。

$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)的返回情况,然后如果用户存在则对返回进行条件更新$user。它更明确,因为更新为不存在的用户返回相同的0,如果用户详细说明了您尝试将其设置为的位置,则更新。

答案 1 :(得分:0)

您可以使用try catch:

try { 
  $query = DB::table('users')
    ->where('id',  '=' , $requestdata['user_id'] )
    ->update([
      'first_name' => $requestdata['user_fname'], 
      'last_name' => $requestdata['user_lname'], 
    ]);
} catch(\Illuminate\Database\QueryException $ex){ 
    return ['error' => 'error update user']; 
}

答案 2 :(得分:0)

如果值相同,更容易更新:

App\User::find($requestdata['user_id'])->update([ 
      'first_name' => $requestdata['user_fname'],  
      'last_name' => $requestdata['user_lname'],
      'updated_at' => Carbon::now()
]);

答案 3 :(得分:0)

在laravel 6.x上使用tap helper为我工作:

return tap(User::findOrFail($id))->update($request->all());