【发布时间】:2020-05-24 15:58:32
【问题描述】:
如何通过report_id 同时更新多行?我的库存表如下所示:
| id | report_id | product_id | shelf_quantity | display_quantity |
|----|-----------|------------|----------------|------------------|
| 1 | 2 | 12 | 1 | 5 |
| 2 | 2 | 13 | 2 | 6 |
| 3 | 2 | 14 | 3 | 23 |
我解决问题的尝试:
我的控制器:
函数更新($id, 请求$request) {
$report = Report::find($id);
$inputs = $request->input('display');
$report->user_id = $user_id;
$report->save();
//Updating inventory table
$inventory = Inventory::where('report_id', $report->id)->get();
foreach($inputs as $key => $value) {
$inventory->display = $request->input('display')[$key] ?: 0;
$inventory->storage = $request->input('storage')[$key] ?: 0;
$inventory->save();
}
我的网络路线:
Route::put('/reports/{id}', 'ReportController@update');
这里的问题是它只保存我输入的最后一个值。
附加信息
我也在使用相同的代码来存储新行,它工作正常。请看下面的代码:
public function store(Request $request) {
//Adding inventory table
$new_inventories = new Inventory();
foreach($inputs as $key => $value) {
$data[] = [
'user_id' => $user_id,
'report_id' => $new_report->id,
'display' => $request->input('display')[$key] ?: 0,
'storage' => $request->input('storage')[$key] ?: 0,
'product_id' => $request->product_id[$key],
'created_at' => $now,
'updated_at' => $now,
// 'remark' => $request->remark[$key] ?? null,
];
}
Inventory::insert($data);
//End of inventory table
}
任何形式的帮助都将不胜感激。谢谢!
我的表单如下所示:
<form action="/reports/{{$report->id}}" method="post">
@csrf
{{method_field('PUT')}}
@foreach($products as $product)
<input type="number" name="product_id[]" value="{{ $product->id}}" hidden>
<input type="number" name="storage[]">
<input type="number" name="display[]">
@endforeach
</form>
【问题讨论】:
-
向我们展示表格.... DD on $request->input() 以供您更新
-
很明显,您循环遍历 $input 数组/集合,但您也应该循环遍历 $inventory 数组/集合,以便能够一次更新一行。
-
您好,我已经用其他信息更新了这个问题。我也很感激你的回复。谢谢
-
你想更新什么?您尝试过什么调试问题?
-
我想更新shelf_quantity 和display_quantity 我试过Inventory::update() 还是一样。而且它只取输入的最后一个值。