如何将数据创建和更新为保存在各个行中的数组

Posted

技术标签:

【中文标题】如何将数据创建和更新为保存在各个行中的数组【英文标题】:How to create & update data as array saved in individual rows 【发布时间】:2021-02-16 18:48:28 【问题描述】:

我遇到了一个问题,我需要将数据作为数组插入到数据库表中,并且我能够将其单独保存在数据库中,下面附有图像和代码

我的输入代码如下所示create.blade.php

<tr>
    <td>
        <input type="text" class="form-control" name="extras_name[]">
    </td>
    <td>
        <input type="number" class="form-control" name="extras_price[]">
    </td>
</tr>
<tr>
    <td>
        <input type="text" class="form-control" name="extras_name[]">
    </td>
    <td>
        <input type="number" class="form-control" name="extras_price[]">
    </td>
</tr>

控制器中的存储功能

   public function store(Request $request, CustomProduct $customProduct)


    $data = $this->validate($request,[
        'name'=>'required',
        'brand'=>'required',
        'price'=>'required',
    ]);

    $customProduct = $customProduct->create($data);

    $data = $request->all();

    foreach ($data['extras_name'] as $index => $extras) 
        CustomProductExtra::create([
            'name' => $data['extras_name'][$index],
            'price' => $data['extras_price'][$index],
            'custom_product_id'=> $customProduct->id,
        ]);
    

   return redirect('custom-product');

这是它在数据库中的保存方式

当我尝试更新数据时,最后一个数据将在两行中重复

编辑视图

它像这样将最后一个输入保存在两行中

控制器中的更新函数

 public function update(Request $request, CustomProduct $customProduct)

    $data = $this->validate($request,[
        'name'=>'required',
        'brand'=>'required',
        'price'=>'required',
    ]);

    $customProduct = $customProduct->update($data);

  $data = $request->all();

  foreach ($data['extras_name'] as $index => $extras) 
    CustomProductExtra::where('custom_product_id',23)->update([
        'name' => $data['extras_name'][$index],
        'price' => $data['extras_price'][$index],
    ]);

    return redirect('custom-product');

它将最后一个输入保存在数据库的两行中,

注意:问题在于更新

谁能帮我解决这个问题

【问题讨论】:

所以您的问题正在更新中。我说的对吗? @NipunTharuksha 是的 我的答案有效吗? @NipunTharuksha 不,它没有 好的,那是什么问题 【参考方案1】:

您的代码可以正常工作。您在这里所做的是通过 for each 更新所有记录。因此,当您的循环使用最后一个数据索引结束其更新时。您需要使用索引循环您的自定义额外产品。但这不是最好的方法。如果您也可以传递带有额外值的 id 会更好。你可以像下面那样做

foreach (CustomProductExtra::where('custom_product_id',23)->get() as $index => $custom)
 $custom->update([$data['extras_name'][$index],$data['extras_price'][$index]]);

【讨论】:

以上是关于如何将数据创建和更新为保存在各个行中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的行数更新 QAbstractTableModel 中的数据

单击 CursorAdapter 中的按钮时如何在列表视图项目行中执行更新和删除操作

每次更新 datagridview 时如何创建历史日志

将数组保存并更新到本地存储JS

猫鼬中的保存功能不起作用

将 json 对象中的元素数组保存到不同的行中