Laravel проверяет уникальный мобильный телефон пользователя, который обновляет его на уровне API?

как эта ссылка и эта ссылка не помогла мне, мне интересно, как я могу проверить уникальный мобильный телефон от пользователя, который обновляет его на уровне API. Например:

public function register(Request $request)
{
    try {
        $user = User::whereMobileNumber($request->mobile_number)->first();

        /*VALIDATION IF USER NOT FOUND*/
        if ($user == null) {
            $validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|unique:users|min:11|max:11',
            ]);
        }else{
            /*VALIDATION IF USER HAVE DATA AND IGNORE CHECK MOBILE NUMBER*/
            $validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|min:11|max:11|unique:users,mobile_number,'.$user->mobile_number,
            ]);
        }

        if ($validator->fails()) {
            return response(['data' => $validator->errors()->all(), 'status' => $user->mobile_number], 200);
        }

        ...
    } catch (\Exception $ex) {
        return response(['data' => $ex->getMessage(), 'status' => '5'], 200);
    }
}

к сожалению, я получаю эту ошибку:

The mobile number has already been taken.

что происходит в этом и как я могу решить эту проблему?


person DolDurma    schedule 03.07.2018    source источник


Ответы (1)


Вы должны передать идентификатор пользователя, а не номер телефона:

$validator = Validator::make($request->all(), [
                'mobile_number' => 'required|string|min:11|max:11|unique:users,mobile_number,'.$user->id,
            ]);

Или вы можете использовать класс правил laravel следующим образом:

use Illuminate\Validation\Rule;

Validator::make($data, [
    'mobile_number' => [
        'required',mobile_number,
        Rule::unique('users')->ignore($user->id),
    ],
]);
person Maraboc    schedule 03.07.2018