Laravel В массиве Valiadtion должен быть один элемент с определенным значением - PullRequest
0 голосов
/ 14 февраля 2020

Отображение, имеющее следующий вход для проверки запроса формы.

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

Существует ли какая-либо проверка, которая позволяет обеспечить, чтобы хотя бы для одной из моделей отношений первичный набор был установлен в значение true? Более совершенным, если он может защитить только один элемент, это правда. Эта проблема выглядит так, как будто она могла существовать раньше.

Так что, если мы видим только входные данные для отношений, это должно пройти.

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

Это должно провалиться при проверке.

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

1 Ответ

4 голосов
/ 14 февраля 2020

Попробуйте встроенное пользовательское правило :

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..
    ];
}

Конечно, вы можете извлечь это из выделенного объекта правила , но вы поймете идею.

...