laravel 4个字段的总和应为100,这些字段并不总是需要填写

5jvtdoz2  于 2023-03-31  发布在  其他
关注(0)|答案(2)|浏览(97)
'boulders_per' => 'numeric',
            'fine_soil_per' => 'numeric',
            Rule::sometimes(function () {
                $sum = $this->input('boulders_per', 0) + $this->input('fine_soil_per', 0);
                return $sum !== 100;
            }),

used requiredif bt这些字段并不总是需要填写,有时使用它会显示错误“消息”:“方法Illuminate\Validation\Rule::有时不存在。",

vwoqyblh

vwoqyblh1#

你可以尝试在你的控制器上实现它(或者在你使用该函数的任何地方):
使用Illuminate\Support\Facades\Validator;

pxy2qtax

pxy2qtax2#

方法:1

必须对单个属性验证使用自定义验证规则。
在AfterValidationHooks中有一个规定,可以编写这种复杂的验证

public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if ($this->get('your_field_1') + $this->get('your_field_2') + $this->get('your_field_3') + $this->get('your_field_4') != 100) {
            $validator->errors()->add(null, 'The sum of field1, field2 and field3 and field4 must be 100');
        }
    });
}

方法:2

可以将值从数组转换为集合,并使用sum collect方法

public function passes($attribute, $value) {
    $values = collect($value);    
    return $values->sum('percentage') <= 100;
}

相关问题