首页 > 解决方案 > laravel 控制器:多个动态行的更新功能

问题描述

invoice_service 表- 发票表

编辑功能在 EditInvoice 刀片中运行良好,并显示特定行及其值。示例:如果我选择编辑发票 N17 ,在 EditInvoice 刀片 2 中将出现结果(见表格图像)。

对于下一步,我需要更新这 2 个结果值(发票服务)。我在更新功能中尝试了很多方法,但没有奏效。

public function store(Request $request) : 
...
.....
$designation = $request->designation;
$QTE = $request->QTE;
$PU = $request->PU;
$total = $request->total;

$c = count($request->designation);
for ( $i=0; $i< $c; ++$i) { //get all rows(dynamic add/remove)
   $invoice_number = $request->invoice_number;
   $invoice_id = Invoices::latest()->first()->id;
   $services = new invoice_services();
   $services->invoice_number = $invoice_number;
   $services->invoice_id = $invoice_id;
   $services->designation = $designation[$i];
   $services->QTE = $QTE[$i];
   $services->PU = $PU[$i];
   $services->total = $QTE[$i] * $PU[$i];
   $services->save();
}   
..
...
public function update(Request $request )
    { 
//Here we need to update the rows !! I tried many ways but it didnt work
}
public function edit($id) { 
$invoices = invoices::where('id', $id)->first();
$services = invoice_services::where('invoice_id' , $id)->get();
$clients = clients::all();
return view('invoices.edit_invoice', compact('clients', 'services' , 'invoices'));
}
@foreach ($services as $service) 
       <tr>
   <td><input type="text" name="designation[{{ $service->id }}]"  value="{{ $service->designation }}" class="form-control"></td>
  <td><input type="text" name="QTE[{{ $service->id }}]" id="QTE'+incrementalRow+'" value="{{ $service->QTE }}" class="form-control"></td>
   <td><input type="text" name="PU[{{ $service->id }}]" id="PU'+incrementalRow+'" value="{{ $service->PU }}" class="form-control"></td>
   <td><input type="text" class="form-control form-control-lg" name="total[{{ $service->id }}]" value="{{ $service->total }}" id="totali'+incrementalRow+'" readonly ></td>
       </tr>
       @endforeach

标签: javascriptphplaravellaravel-5eloquent

解决方案


首先,您需要模型 ID 来更新它们。因此,您必须使用POST(或PUT如果您有资源路由)在您的数据数组中发送模型 ID 。然后在更新函数中设置属性并保存到每个如下所示。

$models = $request->input("models"); // as an array
foreach($models as $model) {
  $row = Incvoices::findOrFail($model["id"]);
  $row->total = $model["total"];
  $row->save();
}

推荐阅读