Создание пользователя
Проект на 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 шт):
Чтобы отловить создание пользователя с уже существующим имэйлом, надо сперва попробовать выбрать пользователя с таким имэйлом. Если пользователь найден, значит имэйл уже занят.