Валидация Laravel с программно удаленной моделью и уникальным полем БД - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь обдумать, как справиться с этим вариантом использования.

У меня есть модель пользователя с уникальным полем БД (электронная почта).Я также использую мягкое удаление.

Мне нужно обработать три случая:

1) Модель пользователя обновлена.На данный момент моя проверка не позволяет пользователю обновляться, потому что этот адрес электронной почты уже существует.Я думаю, что это легко решить путем игнорирования проверки электронной почты, если электронная почта не была изменена.

2) Обновлена ​​другая модель пользователя, и электронная почта заменена на другую электронную почту, уже присутствующую в БД.

3) Создана новая модель, и электронная почта уже присутствует в БД.

Все вышеприведенные сценарии также должны учитывать мягко удаленные модели.

Может быть, у кого-нибудь есть какой-то совето том, как это структурировать?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы можете использовать проверку Rule::unique(). Либо выведите свою пользовательскую модель из маршрута, если вы используете привязку модели, либо выполните традиционный запрос БД, чтобы вывести пользователя по идентификатору (если вы его передаете). Тогда вы можете сделать это в проверке.

Это также подходит для удаленных моделей.

return [
    'email' => Rule::unique('users', 'email')->ignore($user->email)->whereNull('deleted_at)->orWhereNotNull('deleted_at')
]

Или, может быть, так

return [
        'email' => Rule::unique('users', 'email')->ignore($user->email)->withTrashed()
    ]
0 голосов
/ 11 сентября 2018

Для обновления вы можете настроить свои правила проверки, чтобы игнорировать текущую запись пользователя при обновлении. Подпись правила такова:

'email' => 'unique:user,email,{$userId},id,deleted_at,NULL'

Для вставки нового, правило, подобное этому:

'email' => 'unique:user,email,NULL,NULL,deleted_at,NULL'

Должен работать и игнорировать softDeleted записи. Если все равно не получится, если в вашей базе данных есть уникальный ключ.

Конечно, если вы также восстановите запись, у вас будут дубликаты, которые Laravel не сможет предотвратить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...