【问题标题】:Laravel array sum of fields validationLaravel 数组字段总和验证
【发布时间】:2018-12-23 05:22:33
【问题描述】:

我是 Laravel 的新手,我将 Laravel 的验证器用于未在 Laravel 中构建的项目。

我需要知道是否有一个简单的内置 Laravel 验证器来验证数组中所有对象中某个字段的总和。

我的输入看起来像:

{
    "customer":95,
    "name": "My object",
    "values":
        [
        { 
            "name": "AAA",
            "percentage": 50
        },
        {
            "name": "BBB",
            "percentage": 50
        }
    ]

}

我需要确保我的百分比总和是 100。有没有简单的方法?

【问题讨论】:

标签: laravel laravel-validation


【解决方案1】:

使用Custom Validation Rules 进行单属性验证。

After Validation Hook 用于其他或更复杂的验证,例如多个字段的总和。

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

【讨论】:

    【解决方案2】:

    我认为您最好创建一个custom validation rule。在验证中,我将值数组转换为集合并使用collection sum method。例如:

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

    【讨论】:

    • 如果你想传递一个参数给passes()看这个:laracasts.com/discuss/channels/laravel/…
    • 好主意,但是为什么要收集和求和,我们不能使用array_sum吗?有什么想法吗?
    • 我没有测试它,但 array_sum 实际上可能比我在 2018 年在这里输入的更快,因为它不需要您将数组集映射到集合。所以我认为你的建议是有效的。
    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多