使用 Laravel 和 ajax 保存多维数组
Posted
技术标签:
【中文标题】使用 Laravel 和 ajax 保存多维数组【英文标题】:Save multidimensional array using Laravel and ajax 【发布时间】:2021-02-07 02:50:39 【问题描述】:我正在构建一个药房管理系统。我有一个条件需要建立一个部分
如图所示,我需要将数据存储在下面输入的所有行的前三位应该相同的位置。 提交表单数据如下图。
但是循环和保存时的数据没有按需要保存。只有最后一行数据被插入,我也对存储供应商、购买日期和注释感到困惑,因为这些数据应该与添加的行数一样多。
PurchaseController.php
public function storePurchase(PurchaseStoreRequest $request)
$purchase = new Purchase();
$count = count($request->name);
// return response()->json($request->all());
for ($i = 0; $i < $count; $i++)
$purchase->supplier = $request->supplier;
$purchase->purchase_date = $request->purchase_date;
$purchase->description = $request->description;
$purchase->category = $request->category[$i];
$purchase->name = $request->name[$i];
$purchase->generic_name = $request->generic_name[$i];
$purchase->batch_number = $request->batch_number[$i];
$purchase->company = $request->company[$i];
$purchase->strength = $request->strength[$i];
$purchase->expiry_date = $request->expiry_date[$i];
$purchase->quantity = $request->quantity[$i];
$purchase->selling_price = $request->selling_price[$i];
$purchase->purchase_price = $request->purchase_price[$i];
$purchase->save();
return response()->json(['message' => 'Purchase Saved Successfully']);
有人可以帮我将这三个字段存储在数据库中重复提交的行数吗? 目前只有最后一行被插入到数据库中。
【问题讨论】:
$purchase = new Purchase();
在循环内写这行,你在外面写。这就是为什么只插入最后一个低点。无论如何,它会$purchase = new Purchase;
你试过array_merge_recursive()
吗?
【参考方案1】:
对于每个循环,您需要创建一个新实例,然后它将在每个循环上创建一个新记录:
public function storePurchase(PurchaseStoreRequest $request)
// $purchase = new Purchase();
$count = count($request->name);
// return response()->json($request->all());
for ($i = 0; $i < $count; $i++)
$purchase = new Purchase(); // create new instance end with (); on each loop
$purchase->supplier = $request->supplier;
$purchase->purchase_date = $request->purchase_date;
$purchase->description = $request->description;
$purchase->category = $request->category[$i];
$purchase->name = $request->name[$i];
$purchase->generic_name = $request->generic_name[$i];
$purchase->batch_number = $request->batch_number[$i];
$purchase->company = $request->company[$i];
$purchase->strength = $request->strength[$i];
$purchase->expiry_date = $request->expiry_date[$i];
$purchase->quantity = $request->quantity[$i];
$purchase->selling_price = $request->selling_price[$i];
$purchase->purchase_price = $request->purchase_price[$i];
$purchase->save();
return response()->json(['message' => 'Purchase Saved Successfully']);
【讨论】:
感谢您的回复。我想知道为什么没有提交数据。只需将那条线推入内部就可以了。 你能告诉我任何想法来存储购买总额,而无需另一张桌子这样做吗?我的意思是每行的总数(数量 * CP) 你想在另一个表上存储 Quantity * CP 吗?【参考方案2】:这可能是完成您正在寻找的另一种方式。
$sharedKeys = ['supplier', 'purchase_date', 'description'];
$sharedData = $request->only($sharedKeys);
$multiKeys = ['category', 'name', 'generic_name', 'batch_number', 'company', 'strength', 'expiry_date', 'quantity', 'selling_price', 'purchase_price'];
$multiData = $request->only($multiKeys);
for ($i = 0; $i < count($request->name); $i++)
$individualData = array_combine($multiKeys, array_column($multiData, $i));
Purchase::create($sharedData + $individualData);
【讨论】:
以上是关于使用 Laravel 和 ajax 保存多维数组的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 AJAX 在 Laravel 中上传单个文件时出现数组到字符串转换错误