如果其他字段值都等于0,则Laravel请求验证必填字段

时间:2019-04-17 09:01:07

标签: php laravel validation

我的请求中包含一个数组:

['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 个答案:

答案 0 :(得分:2)

required_if将一个数组中的每个元素与您要比较的元素进行比较,因此每个元素将为progress_group[0] == fields[0],依此类推。

您需要的是我估计所有值的总和为0或比要求的要大,如果总和大于0,则不需要。

因此您可以制定自定义规则,也可以这样更新验证:

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

if($total == 0) {
  $rules['fields.*'] = 'required';
}

答案 1 :(得分:0)

我认为您有正确的想法来使用requiredIf,但是我认为您可能使用和语法有误,我认为这是正确的,或者将帮助您解决问题:

Validator::make($request->all(), [
    'progress_group.*' => 'required',
    'fields' => 'present',
    'fields.*' => Rule:requiredIf:(progress_group.*, 0),
]);