我的请求中包含一个数组:
['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];
表示不需要填写。
答案 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),
]);