[英]store array from foreach loop in laravel
我有 function 这是 select 特定用户的数据,然后我想插入/创建'sid', pid,qtyremain, qtysold, amountpaid
到销售表中。
但是现在当我运行查询时,我得到下面的错误
数组到字符串的转换
任何人都可以帮助纠正我做错的地方
我的表单视图刀片
<tbody id="tby">
@foreach($search as $dt)
<tr>
<td><input type="text" value="{{$dt->items->name}}" readonly="" class="form-control"><input type="hidden" value="{{$dt->items->id}}" name="pid[]"></td>
<td><input name="sprice[]" value="{{$dt->items->Sprice}}" readonly="" class="form-control sprice"> </td>
<td><input type="text" name="qtyload[]" value="{{$dt->qty}}" readonly="" class="form-control qtyload"></td>
<td><input type="text" name="qtyremain[]" class="form-control qtyremain"></td>
<td><input type="text" name="qtysold[]" readonly="" class="form-control qtysold"></td>
<td><input type="text" name="amount[]" readonly="" class="form-control amount"></td>
</tr>
@endforeach
</tbody>
我的 controller
public function store(Request $request)
{
//Start Store.
request()->validate([
'sid' => 'required',
'qtyremain' => 'required',
'amountpaid' => 'required',
]);
for ($i = 1; $i < count($request->pid); $i++)
{
$data[] =[
'sid'=>$request->sid,
'pid'=>$request->pid,
'qtyremain'=>$request->qtyremain,
'qtysold'=>$request->qtysold ,
'amountpaid'=>$request->amountpaid,
];
// dd($data);
}
Sale::insert($data);
return redirect()->back()->with('success', 'Successfully Stored');
// }
}
您的data
是一个数组。 所以你应该迭代并进行插入。 所以你可以更换
Sale::insert($data);
和
foreach ($data as $record){
Sale::insert($record);
}
您正在尝试插入多条记录。 但是,您的请求结构是这样的:
[
["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[]
来输入名称。
所以你不需要在后端循环构建结构。
<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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.