Поле обязательного подтверждения запроса Laravel, если все остальные значения поля равны 0 - PullRequest
0 голосов
/ 17 апреля 2019

В моем запросе есть массив:

['progress_group'] = [0, 0];
['fields'] = [];

Если все значения в progress_group имеют значение '0', тогда необходимо заполнить поле: fields. Как мне это реализовать?

Я пробовал:

$rules = [
    'progress_group.*' => 'required',
    //'fields' => 'present',
    'fields.*' => 'required_if:progress_group.*,0'
];

Итак:

['progress_group'] = [0, 0];

означает, что fields требуется, но

['progress_group'] = [0, 1];

означает, что заполнять не обязательно.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

required_if сравнивает каждый элемент из одного массива с тем, с которым вы сравниваете, поэтому для каждого элемента будет progress_group[0] == fields[0] и т. Д.

Вам нужно, чтобы сумма всех значений была равна 0, чем требуется, а если сумма больше 0, то она не требуется.

Таким образом, вы можете создать собственное правило или обновить свою проверку следующим образом:

$total = array_sum(request()->input('progress_group'));

if($total == 0) {
  $rules['fields.*'] = 'required';
}
0 голосов
/ 17 апреля 2019

Я думаю, что у вас была правильная идея использовать requiredIf, но я думаю, что вы можете неправильно использовать синтаксис, я думаю, что это правильно или поможет вам на пути к решению вашей проблемы:

Validator::make($request->all(), [
    'progress_group.*' => 'required',
    'fields' => 'present',
    'fields.*' => Rule:requiredIf:(progress_group.*, 0),
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...