Laravel 验证数组必须有一个具有特定值的元素

Laravel Valiadtion array must have one element with a certain value

具有以下表单请求验证输入的图像。

[
    'relations' =>
        [
            [
                'primary' => true,
            ],
            [
                'primary' => false,
            ],
        ],
],

是否有任何验证可以确保至少一个关系模型的主要设置为真?如果它可以确保只有一个元素是真实的,那就更完美了。这个问题好像以前就存在过。

所以如果我们只看到关系的输入,这应该通过。

[
    'primary' => true,
],
[
    'primary' => false,
],

验证失败。

[
    'primary' => false,
],
[
    'primary' => false,
],

试试 inline custom rule:

public function rules()
{
    return [
        'relations' => function ($attribute, $relations, $fail) {
            $hasPrimary = collect($relations)
                ->filter(function ($el) {
                    return $el['primary'];
                })
                ->isNotEmpty();

            if ( ! $hasPrimary)
            {
                $fail($attribute . ' need to have at least one element set as primary.');
            }
        },

        // the rest of your validation rules..
    ];
}

当然,您可以将其提取到 dedicated Rule object,但您明白了。