Создание пользователя

Проект на laravel. Используется laravel passport. Хочу отловить создание пользователя с уже существующим в базе email. Обернул создание в try/catch:

  try {
        $user = User::create($input);
    } catch (\Exception $ex) {
        \Log::info($ex->getMessage());
    }

Получаем следующее описание ошибки:

SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: users.email (SQL: insert into "users" ("name", "is_admin", "email", "password", "updated_at", "created_at") values (user52, 0, user52, $2y$10$48o0auvS7tamppkvu7fiSO0f74nwMStGeUfurJDG0KGm4xN1/oP8u, 2020-02-12 12:37:45, 2020-02-12 12:37:45))

Как мне понять, что ошибка произошла именно из-за нарушения уникальности поля email ? Искать в $ex->getMessage() подстроку "UNIQUE constraint failed: users.email"? Но если в следующей версии формат описания ошибки измениться? Как сделать это понадежнее?


Ответы (1 шт):

Автор решения: Егор Банин

Чтобы отловить создание пользователя с уже существующим имэйлом, надо сперва попробовать выбрать пользователя с таким имэйлом. Если пользователь найден, значит имэйл уже занят.

→ Ссылка