PHP / Laravel:如何将多维数组保存到数据库中

时间:2016-03-01 23:50:40

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

我有一个大表单,其中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>

1 个答案:

答案 0 :(得分:2)

这种方法存在一些问题。理想情况下,您可以为要更改的每个实体单独调用控制器,使用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();
}