Как в laravel в вадидаторе проверить request по полю на уникальность?
18:08 05-04-2024
Как в laravel в вадидаторе проверить request по полю на уникальность?
У меня в БД есть уникальная запись с полем. И она не должна повторяться. Я повесил на колонку в таблице unique. Проверяю в валидаторе. Проверка выполняется, все хорошо. Но возникает проблема, когда я пытаюсь сохранить уже существующий объект. Пишет что такой элемент уже существует. Но по факту я редактирую его.
Мой код:
Как в laravel выполнять unique валидацию request, но без вывода ошибки на редактируемый объект?
У меня в БД есть уникальная запись с полем. И она не должна повторяться. Я повесил на колонку в таблице unique. Проверяю в валидаторе. Проверка выполняется, все хорошо. Но возникает проблема, когда я пытаюсь сохранить уже существующий объект. Пишет что такой элемент уже существует. Но по факту я редактирую его.
Мой код:
$messages = [
'login.required' => 'Поле "Логин" должно быть заполнено',
'login.string' => 'Поле "Логин" имеет недопустимый тип данных',
'login.max' => 'Поле "Логин" не может быть длиннее :max символов',
'login.unique' => 'Данный логин уже занят',
];
$validator = Validator::make($request->all(), [
'login' => [
'required', 'string', 'max:255', 'unique:users'
],
], $messages);
if ($validator->fails()) {
// Обработка ошибок
}
Как в laravel выполнять unique валидацию request, но без вывода ошибки на редактируемый объект?
Карма:
0
Может быть полезно
Показать больше
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
19:28 08-04-2024
Самый стандартный способ - это указать в валидаторе колонку таблицы, которая должна быть уникальной "unique:users,login," и через запятую передать идентификатор пользователя "\Illuminate\Support\Facades\Auth::user()->id" (Приводу пример на текущем авторизованном пользователе).
Начиная с Laravel 5.7 появился еще один способ выполнения проверки на уникальность:
$validator = Validator::make($request->all(), [
'login' => [
'required', 'string', 'max:255', 'unique:users,login,' . Auth::user()->id,
],
], $messages);
Начиная с Laravel 5.7 появился еще один способ выполнения проверки на уникальность:
$validator = Validator::make($request->all(), [
'login' => [
'required', 'string', 'max:255', \Illuminate\Validation\Rule::unique(User::class)->ignore(Auth::user()->id),
],
], $messages);
Карма:
2