Laravel Controller中关联发票服务表的多动态行update方法编写求助
实现逻辑说明
你需要按「删除弃用行→更新原有行→新增新行」的顺序处理,完整update方法代码如下:
public function update(Request $request, $id) { // 1、找到对应发票实例 $invoice = Invoices::findOrFail($id); // 2、获取提交的所有服务行数据,键为服务ID/新增行临时标识 $designations = $request->designation ?? []; $QTEs = $request->QTE ?? []; $PUs = $request->PU ?? []; // 3、处理删除:提取提交的所有服务行的ID,删除不在提交列表里的旧服务 $submittedServiceIds = collect(array_keys($designations)) ->filter(fn($key) => is_numeric($key)) // 过滤掉新增行的临时标识,只取原有服务ID ->toArray(); // 删除当前发票下,ID不在提交列表里的服务(即用户在前端删除的行) invoice_services::where('invoice_id', $id) ->whereNotIn('id', $submittedServiceIds) ->delete(); // 4、遍历所有提交的行,分别处理更新和新增 foreach ($designations as $key => $designation) { $qte = $QTEs[$key] ?? 0; $pu = $PUs[$key] ?? 0; $total = $qte * $pu; if (is_numeric($key)) { // 数字键为原有服务,执行更新 $service = invoice_services::where('id', $key) ->where('invoice_id', $id) ->first(); if ($service) { $service->update([ 'designation' => $designation, 'QTE' => $qte, 'PU' => $pu, 'total' => $total ]); } } else { // 非数字键为新增行(新增行name属性用new_前缀的临时标识,比如new_1、new_2),执行新增 invoice_services::create([ 'invoice_number' => $invoice->invoice_number, 'invoice_id' => $id, 'designation' => $designation, 'QTE' => $qte, 'PU' => $pu, 'total' => $total ]); } } // 补充你自己的其他发票主字段更新逻辑、跳转逻辑即可 return redirect()->route('invoices.index')->with('success', '发票更新成功'); }
配套适配调整
- 前端新增行适配:修改动态新增行的JS逻辑,给新增行的input的name属性设置
new_前缀的键,避免和原有服务ID冲突,示例如下:
// 新增行时的示例代码,incrementalRow为自增的临时序号 let newRow = ` <tr> <td><input type="text" name="designation[new_${incrementalRow}]" class="form-control"></td> <td><input type="text" name="QTE[new_${incrementalRow}]" class="form-control"></td> <td><input type="text" name="PU[new_${incrementalRow}]" class="form-control"></td> <td><input type="text" class="form-control form-control-lg" name="total[new_${incrementalRow}]" readonly ></td> </tr> `;
- 路由调整:确保update路由配置了ID参数,示例:
Route::put('/invoices/{id}', [InvoiceController::class, 'update'])->name('invoices.update');
内容的提问来源于stack exchange,提问作者Salah Eddine
相关产品推荐
相关产品推荐

