Требуется проверка If для массива Laravel с пустым значением

#php #laravel #request

#php #laravel #запрос

Вопрос:

У меня есть следующие входные данные

 {
    "password":"password",
    "environment_roles":[
        {
            "environment_id":"",
            "role_id":""
        }
    ],
    "admin":true    
}
  

и иметь класс запроса со следующими правилами :

  public function rules()
    {
        return [
            'password'                              => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*d). $/',
            'environment_roles'                     => 'array',
            'environment_roles.*.role_id'           => 'required_if:admin,false|exists:roles,role_id',
            'environment_roles.*.environment_id'    => 'required_if:admin,false|exists:environment,environment_id',
            'admin'                                 => 'sometimes'
        ];
    }
  

Но он показывает следующую ошибку проверки, если я ввожу вышеуказанный ввод, который имеет admin значение as true .

 "validation": {
            "environment_roles.0.role_id": [
                "The selected environment_roles.0.role_id is invalid."
            ],
            "environment_roles.0.environment_id": [
                "The selected environment_roles.0.environment_id is invalid."
            ]
        },
  

Как я могу это исправить. Мне нужно проверить environment_roles.*.role_id и environment_roles.*.environment_id когда значение для admin равно true.

Комментарии:

1. показывает какое сообщение проверки?

2. вы изучали exclude_if exclude_unless правила и?

Ответ №1:

Если вы всегда отправляете admin prop, было бы более подходящим сделать его обнуляемым, а не обязательным. Вы могли бы попробовать с этим:

 public function rules()
{
    return [
        'password'                              => 'required|min:6|regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*d). $/',
        'environment_roles'                     => 'array',
        'environment_roles.*.role_id'           => 'nullable|required_if:admin,false|exists:roles,role_id',
        'environment_roles.*.environment_id'    => 'nullable|required_if:admin,false|exists:environment,environment_id',
        'admin'                                 => 'bool|sometimes'
    ];
}
  

Но ваша ошибка показывает, что роль и идентификатор среды не существуют в базе данных (правило exists ). Установка для этих двух полей значения nullable означает, что оно не вызовет правило exists .