使用 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 保存多维数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 8 Blade 中使用多维数组

尝试使用 AJAX 在 Laravel 中上传单个文件时出现数组到字符串转换错误

Laravel - 无法使用刀片从多维数组中获取值

具有多维数组的 Foreach - Laravel Blade 模板

如何在 Laravel 测试中发布多维数组?

如何使用 laravel 将多维数组传递给 API