我有一个大表单,其中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 & 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>
答案 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();
}