如何解决如何在laravel中正确进行批量保存或多次保存?
请我如何正确地将多个数据插入数据库。正在构建库存系统,但在尝试插入数据库时出错。
这就是我现在所拥有的。 Blade.php
<form method="POST" action="{{URL::to('/new-invoice')}}">
<table class="table table-head-fixed text-nowrap" id="myTable">
<thead>
<tr>
<th>Qty</th>
<th>Item</th>
<th>Description</th>
<th>Unit Price</th>
<th>Tax</th>
<th>Total</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="number" name="inv_qty[]" class="form-control quantity" style="width: 70px"></td>
<td>
<select name="inv_item[]" class="form-control item" style="width: 250px">
<option>Items</option>
</select>
</td>
<td><input type="text" name="inv_desc[]" class="form-control description" style="width: 400px"></td>
<td><span class="tag tag-success"><input type="text" name="inv_unit_price[]" class="form-control u_price" style="width: 150px"></span></td>
<td><span class="tag tag-success"><input type="text" name="inv_tax[]" class="form-control tax" style="width: 150px"></td>
<td><span class="tag tag-success"><input type="text" name="inv_total[]" class="form-control amount" style="width: 150px"></td>
<td>
<span><button class="btn btn-default"><i class="fa fa-trash" aria-hidden="true"></i></button></span>
<span><button type="button" onclick="myFunction()" class="btn btn-default"><i class="fa fa-plus" aria-hidden="true"></i> Add Row</button></span>
</td>
</tr>
</tbody>
</table>
<button class="btn btn-primary">Save</button>
</form>
控制器文件
public function store(Request $request)
{
$data = $request::all();
$finalArray = array();
foreach($data as $key=>$value){
$finalArray = array(
'inv_qty'=>$value['inv_qty'],'inv_item'=>$value['inv_item'],'inv_desc'=>$value['inv_desc'],'inv_unit_price'=>$value['inv_unit_price'],'inv_tax'=> $value['inv_tax'],'inv_total'=> $value['inv_total']);
Invoice::insert($finalArray);
}
}
这是错误消息,正在获取 非法字符串偏移'inv_qty' 。我该如何解决此问题,并将其成功添加到数据库中?
解决方法
当前,您正在遍历请求,而不是您要遍历的实际数据。这是您的请求的示例:
array:7 [▼
"_token" => "xxxxxxxxxxxxxxxxxx"
"inv_qty" => array:2 [▶]
"inv_item" => array:2 [▶]
"inv_desc" => array:2 [▶]
"inv_unit_price" => array:2 [▶]
"inv_tax" => array:2 [▶]
"inv_total" => array:2 [▶]
]
我目前在共享的代码中看不到您的Javascript函数(myFunction),但是如果您设置表单以以下方式工作,则可以更新Javascript函数以跟踪当前的索引,然后在添加新行之前将所述索引调整为您的输入名称属性。
例如:
<input type="number" name="items[0][inv_quantity]"/>
<input type="number" name="items[0][inv_price]"/>
<input type="number" name="items[1][inv_quantity]"/>
<input type="number" name="items[1][inv_price]"/>
<input type="number" name="items[2][inv_quantity]"/>
<input type="number" name="items[2][inv_price]"/>
然后在您的控制器方法中,而不是直接遍历您的请求,您将遍历以下项目:
$data = $request->all();
if(array_key_exists('items',$data)) {
foreach($data['items'] as $item) {
Invoice::insert([
'inv_quantity' => $item['inv_quantity'],'inv_price' => $item['inv_price'],]);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。