如果记录退出,则更新,如果记录不存在,则插入/保存



我有一个编辑表单,可以编辑像(发票(这样的数组,我希望当我编辑Invoice_no时,还可以在同一发票编号上添加新项目

例如,Inv_no=300及其携带 3 个数组 ([... .........](,所以我想将新的一个数组添加为 4 个数组。

在我的代码下面是更新数组井数据,但如果我添加新的一行不会在保持更新时保存该新行,

我可以在这里做什么来添加/保存新的数据。

public function update(Request $request, $inv_no)
{
$data = $request->all();
//dd($data);
$stocks = Stock::where('inv_no', $inv_no)->get();
$i = 0;
foreach ($stocks as $stock) {  
Stock::where('inv_no', $inv_no)
->where('id', $stock->id)
->update([
'pid' => $request->pid[$i],
'qty' => $request->qty[$i],
'inv_no' => $request->inv_no,
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);
$i++;
}
return $this->index();
}

我认为你需要这样的东西。您提到需要更新发票编号是否存在,并且您还希望使用此发票编号创建新项目。如果您有任何疑问,请随时询问我

public function update(Request $request, $inv_no)
{
$data = $request->all();
$stocks = Stock::where('inv_no', $inv_no)->get();
$i = 0;
foreach ($stocks as $stock) {
$stock->update([
'pid' => $request->pid[$i],
'qty' => $request->qty[$i],
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);
$i++;
}
$totalPid = count($request->pid);
$totalQty= count($request->qty);
Stock::create([
'pid' => $request->pid[$totalPid - 1],
'qty' => $request->qty[$totalQty - 1],
'inv_no' => $request->inv_no,
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);
return $this->index();
}

您可以使用updateOrCreate方法:

foreach ($stocks as $stock) {  
Stock::updateOrCreate(['id' => $stock->id], [
'pid' => $request->pid[$i],
'qty' => $request->qty[$i],
'inv_no' => $request->inv_no,
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);
}

有关更多信息,请参阅 Laravel文档。

我现在可以看到你需要什么。如果你把这个where(['id', $stock->id])你只会找到并更新已经存在的东西。由于您与您搜索的值进行比较$stocks = Stock::where('inv_no', $inv_no)->get();.

如果您需要搜索"inv_no"是您输入的值的位置或创建新记录,请执行以下操作:

Stock::updateOrCreate(['inv_no', $inv_no], [
'pid' => $request->pid[$i],
'qty' => $request->qty[$i],
'inv_no' => $request->inv_no,
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);

这样,您将搜索任何"inv_no"等于您输入的值的记录,更新它或创建一个新值(如果它不存在(。此外,您可以删除行$stocks = Stock::where('inv_no', $inv_no)->get();foreach ($stocks as $stock) {}.

UpdateorCreate是你需要的,但你必须扭曲它,让它满足你的需要。

UpdateOrCreate可以采用 2 个数组参数。第一个数组基本上是你的where子句,告诉函数查找特定参数,如果找到它们,则更新,否则创建一个新记录。

Stock::updateOrCreate([
'id' => $stock->id
'pid' => $request->pid[$i],
'inv_no' => $request->inv_no], 
'qty' => $request->qty[$i],
[
'user_id' => Auth::user()->id,
'Indate'=>$request->Indate,
'supplierName' => $request->supplierName,
'receiptNumber' => $request->receiptNumber,
'truckNumber' => $request->truckNumber,
'driverName' => $request->driverName,
'remark' => $request->remark,
]);

不清楚您的数据,但如果有以下记录,上面的代码将检查您的数据库:

  • 标识匹配$stock->id
  • PID 匹配$request->pid[$i]
  • inv_no匹配$request->inv_no

您可以进一步扩展 where 子句,您甚至可以只使用 1 个数组来处理所有数据,并告诉函数查找具有所有字段匹配的记录,否则创建一个新记录。

相关内容

最新更新