Ваш foreach
выполняет итерацию по входам, а не по массивам в этих входах:
foreach ($data as $item)
На первой итерации $item
- это массив name
. Во второй итерации $item
- это массив product_id
и т. Д. name
не имеет индекса с именем name
, price
или quantity
, его индексы являются числовыми (0-индексированными).
Одним из способов будет итерация тех входных данных, которые являются массивами:
for ($i = 0; $i < count($data['names']); $i++) {
$name = $data['name'][$i];
$product_id = $data['product_id'][$i];
$price = $data['price'][$i];
...
}
Здесь делаются предположения, но, надеюсь, это иллюстрирует, что вам нужно сделать, если вы хотите продолжать использовать входные данные, названныев настоящее время.
Обновлено:
Если вы хотите изменить имена входов, вам может быть проще сгруппировать их:
<input type="hidden" name="items[{{ $item->id }}][name]" value="{{ $item->name }}" />
<input type="hidden" name="items[{{ $item->id }}][price]" value="{{ $item->price }}" />
...
foreach ($request->input('items', []) as $id => $item) {
$name = $item['name'];
$price = $item['price'];
...
}
Теперь входы, которые относятся к одному элементу, группируются в массив вместе по идентификатору элемента.
Когда вы добавляете поля динамически, вы должны убедиться, что вы также используете этот аналогименование, которое включает ключ для группировки их, в данном случае «id».
items[27][name]
items[27][price]
...