Вы пытаетесь вставить несколько записей. однако ваша структура запроса выглядит следующим образом:
[
["sid" => [ "1" ],
"pid" => ["6", "8", "5"],
"qtyremain" => ["2" , "2", "2"],
"qtysold" => ["18", "38", "53" ],
"amountpaid" => "33333"
]
]
И ошибка возникает из-за того, что проверка Laravel не может проверить поле, значением которого является массив. Если вы хотите проверить элемент массива, вам нужно использовать *
, сделать что-то вроде этого:
request()->validate([
'sid.*' => 'required',
'qtyremain.*' => 'required',
'amountpaid' => 'required',
]);
Однако я предлагаю вам использовать sell[$i][pid]
вместо pid[]
для ввода name.
Таким образом, вам не нужно создавать структуру по l oop в бэкэнде.
<tbody id="tby">
@foreach($search as $i => $dt)
<tr>
<td><input type="text" value="{{$dt->items->name}}" readonly="" class="form-control"><input type="hidden" value="{{$dt->items->id}}" name="sale[$i][pid]"></td>
<td><input name="sale[$i][sprice]" value="{{$dt->items->Sprice}}" readonly="" class="form-control sprice"> </td>
<td><input type="text" name="sale[$i][qtyload]" value="{{$dt->qty}}" readonly="" class="form-control qtyload"></td>
<td><input type="text" name="sale[$i][qtyremain]" class="form-control qtyremain"></td>
<td><input type="text" name="sale[$i][qtysold]" readonly="" class="form-control qtysold"></td>
<td><input type="text" name="sale[$i][amount]" readonly="" class="form-control amount"></td>
</tr>
@endforeach
</tbody>
Таким образом, структура запроса будет такой:
["sale" =>[
["pid" => "1", "sid" => 2, "qtyremain" => 12, "qtysold" => 22, 'amountpaid' => 23.0],
["pid" => "2", "sid" => 2, "qtyremain" => 15, "qtysold" => 25, 'amountpaid' => 25.0]
...
]]
И проверяют поля для этого массива и вставляют их более быстрым и чистым способом:
$data = request()->validate([
'sale.*.sid' => 'required',
'sale.*.qtyremain' => 'required',
'amountpaid' => 'required',
...
]);
$sale = $data['sale'];
$array = collect($sale)->map(function($item) use ($data) {
$item['amountpaid'] = $data['amountpaid'];
return $item;
})->all();
Sale::insert($array);