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

问题描述:

我有一个很大的表单,其中3个数组从控件的形式发送到:product_code |数量|成本。PHP/Laravel:如何将多维数组保存到数据库中

$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> 
+0

你试图将它们保存到一个字段或单独的字段? –

+0

我猜你正在保存数组中的项目的顺序有问题。您的'product_code'数组看起来像一个'

+0

@QuickDanger感谢您关注此事。我用HTML格式编译HTML,所以你可以更好地看到它。 是的,我的问题是,foreach循环被设计为采取一个数组,并分出两个值:键和值。 我的问题是,我有3个数组都有一个键值对加上一个客户ID,我需要重新组装它们,以便我可以做一个DB插入customer_id | product_id |数量|成本 我已经尝试了所有不同种类的foreach循环。我尝试过将数组组合起来,尝试了一个for循环。我无法得到它。 – Vince

有这种方法的几个问题。理想情况下,您可以为每个想要更改的实体分别调用控制器,并在用户更改实体时使用AJAX进行每次单独调用。这解决了与实体ID无关的属性问题(在你的案例中,product_code)。

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

很明显,我不知道你的模型的具体细节,或者你正在寻找什么,但基于你的粘贴bin,这应该工作。

$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(); 
} 
+0

值得一提的是,如果'$ id [$ i] == 0',它被认为是“空的”并被跳过。 – QuickDanger