【问题标题】:PHP / Laravel: How to save a multidimensional array into the DBPHP / Laravel:如何将多维数组保存到数据库中
【发布时间】:2016-06-14 15:20:30
【问题描述】:

我有一个大表格,其中 3 个数组从表格发送到控制器:product_code |数量 |成本。

$id = $request->get('product_code');   // GRAB PRODUCT DATA FROM POST ARRAY
$qty = $request->get('quantity');   // GRAB QUANTITY DATA FROM POST ARRAY
$cost = $request->get('cost');      // GRAB COST DATA FROM POST      

所有三个数组的请求输出都在这里:PasteBin

我的问题是我无法弄清楚如何最好地遍历这三个数组中的每一个,以便我可以以正确的顺序将值插入 MySQL。我已经尝试了一个 foreach、一个嵌套的 foreach 和一个 for 循环,但我还没有设法将所有三个值插入到一行中。

我认为 HTML 不是很相关,但这里有一个示例:

<div class="well form-group  ">
    <div class="col-sm-2 col-md-2">
        <label for="nails_staples">Nails &amp; Staples:</label>
    </div>
    <div class="col-sm-4 col-md-4">
        <select class="form-control product_id" name="product_code[10]">
            <option selected="selected" value="">None</option>
            <option value="8769">1 1/4 Coil Nails - box | $26.00</option>
            <option value="6678">2&quot; Hot Dipped Shake Nails | $135.00</option>
        </select>
    </div>
    <div class="col-sm-1 col-md-1">
        <label for="nails_req">Quantity:</label>
    </div>
    <div class="col-sm-2 col-md-2">
        <input class="form-control quantity" name="quantity[10]" type="text">
    </div>
    <div class="col-sm-1  col-md-1">
        <label for="cost">Cost:</label>
    </div>
    <div class="col-sm-2 col-md-2">
        <input class="form-control cost" readonly="readonly" name="cost[]" type="text">
    </div>
</div>

【问题讨论】:

  • 您是要将它们保存到一个字段还是单独的字段中?
  • 我猜您在保留数组中的项目顺序时遇到问题。您的product_code 数组看起来像&lt;select&gt; 标记,在不同的浏览器中对多项选择进行了奇怪的处理,并且排序顺序可以更改。您能否举一个 3 个数组或整个表单的输入数据示例?也许dd($request); 在您的控制器中并将其发布到pastebin?
  • @QuickDanger 感谢您查看此内容。我用已编译的 HTML 替换了 HTML,以便您可以更好地看到它。是的,我的问题是 foreach 循环旨在获取一个数组并拆分两个值:键和值。我的问题是我有 3 个数组,它们都带有一个键值对和一个客户 ID,我需要以某种方式重新组装它们,以便我可以对 customer_id | 进行数据库插入。产品编号 |数量 |成本我尝试了所有不同类型的 foreach 循环。我尝试过组合数组,尝试过 for 循环。我就是看不懂。
  • @CanCelik 感谢您查看此内容。我希望在我上面的评论中澄清一些事情。
  • @QuickDanger 现在添加了带有输出的粘贴箱。谢谢!

标签: php mysql arrays multidimensional-array laravel-5


【解决方案1】:

这种方法存在一些问题。理想情况下,您会为要更改的每个实体单独调用控制器,并在用户更改实体时使用 AJAX 进行每个单独的调用。这解决了属性与实体 ID(在您的情况下为 product_code)没有紧密关联的问题。

如果您愿意假设所有数组都匹配,您至少应该检查它们的长度是否相同。

显然,我不知道您的模型的所有细节或您正在寻找的确切内容,但根据您的粘贴箱,这应该可以工作。

$id = $request->get('product_code');   // GRAB PRODUCT DATA FROM POST ARRAY
$qty = $request->get('quantity');      // GRAB QUANTITY DATA FROM POST ARRAY
$cost = $request->get('cost');         // GRAB COST DATA FROM POST   

$count_ids = count($id);
if(count($qty) != $count_ids || count($cost) != $count_ids) throw new Exception("Bad Request Input Array lengths");
for($i = 0; $i < $count_ids; $i++){
    if (empty($id[$i])) continue; // skip all the blank ones
    $newProduct = new Product();
    $newProduct->code = $id[$i];
    $newProduct->qty = $qty[$i];
    $newProduct->cost = $cost[$i];
    $newProduct->save();
}

【讨论】:

  • 值得一提的是,如果$id[$i] == 0,则认为是“空”而跳过。
猜你喜欢
  • 2015-09-22
  • 2018-02-17
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2022-06-10
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多