Как в laravel в вадидаторе проверить request по полю на уникальность?

18:08 05-04-2024

Как в laravel в вадидаторе проверить 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, но без вывода ошибки на редактируемый объект?

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
19:28 08-04-2024
Самый стандартный способ - это указать в валидаторе колонку таблицы, которая должна быть уникальной "unique:users,login," и через запятую передать идентификатор пользователя "\Illuminate\Support\Facades\Auth::user()->id" (Приводу пример на текущем авторизованном пользователе).
$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
© 2024 Zambers.Ru All Rights Reserved.

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем файлы cookies