Laravel: проверка пользовательского массива зависит от предыдущего выбранного значения - PullRequest
0 голосов
/ 09 апреля 2020

Laravel версия: 7.x

Я проверил код с верным кодом device_company_id (который связан с выбранным устройством), и он работает нормально.

Таблицы

device_companies
|- id
|- company_id
|- title
|- ...

devices
|- id
|- device_company_id
|- ...

Запрос данных

Array
(
    ...

    [devices] => Array
        (
            [0] => Array
                (
                    [device_company_id] => 1
                    [device_id] => 2
                    [device_inventory_id] => null
                    [amount] => 
                    [refundable] => 
                    [description] => 
                )

        )
)

Правила:

...

$rules = array_merge($rules, [
    'devices' => [
        'required', 
        'array'
    ],
    'devices.*.device_company_id' => [
        'required', 
        'integer', 
        'exists:device_companies,id,company_id,' . auth()->user()->id
    ],
    'devices.*.device_id' => [
        'required', 
        'integer', 
        'exists:devices,id,device_company_id,devices.*.device_company_id'
    ],
]);

...

Мне нужно пользовательское правило проверки для exists валидатора проверить, действительно ли device принадлежит выбранному device_company или нет. Потому что я не хочу, чтобы кто-либо открывал инструмент проверки, изменил значение и вызвал ошибку приложения или что-то в этом роде.

1 Ответ

0 голосов
/ 09 апреля 2020

Вот ссылка, где я нашел ссылку https://ericlbarnes.com/2015/04/04/laravel-array-validation/

Мой код:

...

$rules = [
    ...other rules
];

$newRules = [
    'devices' => [
        'required', 
        'array'
    ],
    'devices.*.device_company_id' => [
        'required', 
        'integer', 
        'exists:device_companies,id,company_id,' . auth()->user()->id
    ],
];

foreach($data['devices'] as $key => $array)
{
    $newRules["devices.{$key}.device_id"] = [
        'required',
        'integer',
        "exists:devices,id,device_company_id,{$array["device_company_id"]}",
    ];
}

$rules = array_merge($rules, $newRules);

...

Хотя этот код работает для меня но я чувствую, что это не правильный способ сделать это. Это похоже на обходной путь вместо правильного решения. Если кто-то найдет лучшее решение, пожалуйста, оставьте свой ответ.


Надеюсь, это может быть полезно для кого-то. Спасибо:)

...