Laravel DB :: update仅返回0或1

Sha*_*ary 4 database laravel

update如果查询失败或者因为更新值相同而没有影响行,则Laravel DB 函数返回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']; 

        }
Run Code Online (Sandbox Code Playgroud)

Leo*_*mer 8

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

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

所以上面将返回更新的记录数.0表示没有记录已更新.

但是,对于您来说,即使0返回了一个错误也可能也不表示错误,因为它只是意味着没有更新的记录.因此,如果您尝试使用实际已包含的详细信息更新用户的名称和姓氏,则将返回查询0.

有用的旁注,玩php artisan tinker,即.

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

再次运行相同的查询,您会注意到它返回0受影响的行,因为名称已经存在Testing

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

更新补充:

因此,对于您来说,最好首先检查用户是否存在a User::findOrFail($id)或者仅检查返回,User::find($id)然后如果用户存在,则对返回的进行条件更新$user.它更明确,因为更新0对于不存在的用户返回相同的内容,并且如果用户详细说明了您尝试将其设置为的位置.