Laravel проверки с условием "или" - PullRequest
2 голосов
/ 19 февраля 2020

Я пытаюсь выполнить проверку ввода в Laravel с несколько сложным условием "или".

Мне нужен валидатор для проверки ввода (пусть он пройдет), если его значение присутствует в таблицу спецификаций c или ее значение равно «other».

Пока что у меня есть:

$validator = Validator::make($data, [

    ...

    'doc_organization' => ['required_with:rb_regist,doctor, exists:user_organizations,full_name'], // TODO: must exist in user_organizations table or be "other"
    'doc_custom_organization' => ['required_if:doc_organization,other', 'max:160'],

    ...

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

Laravel Проверка с помощью или

Проверка правил required_if с другим условием (Laravel 5.4)

Но я не могу придумать пользовательское правило, в котором я не запрашиваю всю таблицу, чтобы узнать, существует ли имя (в случае, если это не «другое») ). Это сделало бы правило слишком сложным для его цели.

Другое решение, которое у меня есть, - добавить запись с именем "other" в таблицу user_organizations, что не идеально.

Я пропустил что-то? Как создать требуемое условие без сложного настраиваемого правила проверки?

Большое спасибо.

1 Ответ

2 голосов
/ 19 февраля 2020

Поскольку "other" - это просто значение, а не запись в вашей базе данных, вы можете просто немного "повернуть его" к чему-то вроде:

'doc_organization' => ['nullable|required_with:rb_regist,doctor, exists:user_organizations,full_name'],

Суть в том, что перед вашим Validator вами может иметь простую проверку запрошенного вами значения, например:

if($request->doc_organization == "other"){
  $request->merge(['doc_organization' => null]);
}

и вставить null значение в поле внутри запроса.

Сделав это, вы будете соблюдать опцию "nullable" который позволит вам пройти.

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