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 & 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" 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>
答
有这种方法的几个问题。理想情况下,您可以为每个想要更改的实体分别调用控制器,并在用户更改实体时使用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
你试图将它们保存到一个字段或单独的字段? –
我猜你正在保存数组中的项目的顺序有问题。您的'product_code'数组看起来像一个'
@QuickDanger感谢您关注此事。我用HTML格式编译HTML,所以你可以更好地看到它。 是的,我的问题是,foreach循环被设计为采取一个数组,并分出两个值:键和值。 我的问题是,我有3个数组都有一个键值对加上一个客户ID,我需要重新组装它们,以便我可以做一个DB插入customer_id | product_id |数量|成本 我已经尝试了所有不同种类的foreach循环。我尝试过将数组组合起来,尝试了一个for循环。我无法得到它。 – Vince