Laravel DB::update only return 0 or 1

An update query returns the number of rows that where affected by the update query.

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

So the above will return the number of records that where updated. 0 means that no records have been updated.

However, for you it might also not signify an error even if a 0 was returned as it just means that no records where updated. So if you try to update the name and lastname of a user with the details it actually already contains the query will return 0.

Useful side note, play with php artisan tinker, ie.

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

run the same query again and you will notice it returns 0 affected rows as the name is already Testing

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

Updated addition:

So for you it might be better to first check if the user exists with either a User::findOrFail($id) or just check the return of User::find($id) and then if the user exists you do your conditional update on the returned $user. It is more explicit as update returns the same 0 for a non-existent user and a if the user details already where what you are trying to set it to.