Для проверки массива в laravel требуется, чтобы ключ существовал. Удалить ключ и пройти проверку

У меня есть массив элементов, отправленный контроллеру как JSON в ключе формы элементов.

[{
    "sku": "w-hook-as1",
    "qty": 2,
    "cost_ex_tax": "34.22",
    "tax_rate": "0.2"
}]

Здесь он преобразуется в массив:

$request->merge(['items' => json_decode($request->items, true)]);

и подтверждено в соответствии с правилом:

'items.*.sku' =>[
    'required',
    Rule::exists('products')->where(function ($query) {
        $query->where('company_id', Auth::user()->company_id);
    })
],

Правило существует, если существует ключ массива, по которому выполняется его проверка, при условии, что этот ключ существует. Если я просто отправлю:

[{
    "qty": 2,
    "cost_ex_tax": "34.22",
    "tax_rate": "0.2"
}]

Затем проверка проходит.

Есть ли способ проверить, существует ли ключ, а также проверить его содержимое? Я ожидал, что требуемая проверка сделает это, но похоже, что это не работает.

Как проверить массив в Laravel? - этот ответ предлагает подтвердить, что это массив с количеством элементов x, но все еще не проверяет, есть ли там точные ключи, которые я ищу.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
2 089
1

Ответы 1

Я попытался воспроизвести то, что у вас есть, без специального правила, поэтому я сделал следующее:

в моем клинке у меня есть

<input type = "text" name = "items" value='[{"sku": "w-hook-as1","qty": 2,"cost_ex_tax": "34.22","tax_rate": "0.2"}, {"qty": 2,"cost_ex_tax": "34.22","tax_rate": "0.2"}]'>

Вы можете заметить здесь, что в моем втором объекте у меня нет элемента sku в этом объекте. Затем в контроллере:

$arr = request()->merge(['items' => json_decode(request('items'), true)]);

$validator = Validator::make($arr->all(), [
   'items.*.sku' =>[
        'required'
    ]
]);

dd($validator->fails(), $validator);

И ответ такой:

true // this is because the validation fails.
// and the message bag contains this
#messages: array:1 [▼
  "items.1.sku" => array:1 [▼
    0 => "The items.1.sku field is required."
  ]
]

Поэтому убедитесь, что вы не делаете ничего плохого.

Распечатайте $request->all() и убедитесь, что ваши предметы содержат следующее:

"items" => array:2 [▼
  0 => array:4 [▼
    "sku" => "w-hook-as1"
    "qty" => 2
    "cost_ex_tax" => "34.22"
    "tax_rate" => "0.2"
  ]
  1 => array:3 [▼
    "qty" => 2
    "cost_ex_tax" => "34.22"
    "tax_rate" => "0.2"
  ]
]

если нет, то вам нужно изменить валидацию.

Дайте мне знать, если я не выполняю некоторые шаги, которые вы делаете.

Другие вопросы по теме