我已经创建了一个像下面的图像一样的多输入表单,我想保存到数据库中,问题是当我使用dd()时,它只显示第二行数据。
如何将每一行保存到数据库?

这是我的laravel控制器
public function store(Request $request)
{
$input = Input::all();
$condition = $input['service_id'];
foreach ($condition as $key => $condition) {
$detailorder = new DetailOrder;
$detailorder->serivce_id = $input['service_id'][$key];
$detailorder->order_type = $input['order_type'][$key];
$detailorder->select_plan = $input['select_plan'][$key];
$detailorder->qty = $input['qty'][$key];
$detailorder->unit_price = $input['unit_price'][$key];
//$detailorder->mandays = $input['mandays'][$key];
$detailorder->note = $input['note'][$key];
}
dd($detailorder);
}这里是我的表脚本,我使用jQuery来创建它
function getCorporateService(id){
// get data and parsing to column
$.get("{{ url('salesorder/service')}}/"+id, function(data){
console.log(id);
console.log(data);
$.each(data, function (index, element){
$br = "<tr id='item'>";
$br += "<td> <input class='input-small' type='text' id='order_identifier' name='order_identifier[]' readonly></td>";
$br += "<td><input class='input-small' type='text' id='service_name["+id+"]' name='service_name[]' value='"+element.service_name+"' readonly>"
+"<input class='input-small' type='hidden' id='service_id["+id+"]' name='service_id[]' value='"+element.id+"' readonly></td>";
$br += "<td><select id='order_type["+id+"]' name='order_type[]'> <option> - </option> <option value='add'>Add</option> <option value='change'>Change</option> <option value='cancel'>Cancel</option> </select></td>";
$br += "<td><input class='input-small' type='text' id='select_plan["+id+"]' name='select_plan[]'></td>";
$br += "<td><input class='input-mini' type='text' id='qty["+id+"]' name='qty[]' value='1' onChange='getTotalPrice("+id+")'></td>";
$br += "<td><input class='input-small' type='text' id='unit_price["+id+"]' name='unit_price[]' onChange='getTotalPrice("+id+")'></td>";
$br += "<td><input class='input-small' type='text' id='total_price["+id+"]' name='total_price[]' onChange='getTotalPrice("+id+")'></td>";
$br += "<td><textarea class='input-small' id='notes["+id+"]' name='note[]'></textarea></td>";
$br += "</tr>";
$(".corporatesvc").append($br);
});
});
}发布于 2016-12-02 12:33:20
我不知道你的dd函数。当前循环运行并消失所有旧订单并传递dd function中的最后一个订单,因此您需要创建一个对象数组并将其传递到函数中,如下所示,
$allOrders=array(); // make an array, for storing all detail order in it
foreach ($condition as $key => $condition) {
$detailorder = new DetailOrder;
//you can use to ignore $key::=> $detailorder->serivce_id = $condition['service_id'];
$detailorder->serivce_id = $input['service_id'][$key];
$detailorder->order_type = $input['order_type'][$key];
$detailorder->select_plan = $input['select_plan'][$key];
$detailorder->qty = $input['qty'][$key];
$detailorder->unit_price = $input['unit_price'][$key];
//$detailorder->mandays = $input['mandays'][$key];
$detailorder->note = $input['note'][$key];
$allOrders[]=$detailorder;
}
dd($allOrders); // pass it to the function发布于 2016-12-02 12:44:21
在public function store(Request $request)中,添加如下所示的行
public function store(Request $request)
{
$input = Input::all();
$condition = $input['service_id'];
foreach ($condition as $key => $condition) {
$detailorder = new DetailOrder;
$detailorder->serivce_id = $input['service_id'][$key];
$detailorder->order_type = $input['order_type'][$key];
$detailorder->select_plan = $input['select_plan'][$key];
$detailorder->qty = $input['qty'][$key];
$detailorder->unit_price = $input['unit_price'][$key];
//$detailorder->mandays = $input['mandays'][$key];
$detailorder->note = $input['note'][$key];
//for saving each DetailOrder to database
$detailorder->save();
}
}注意,这里应该从foreach循环中调用save(),以便将每一行保存到数据库。
考虑到您的JavaScript工作正常,上述修改将保存数据库中每一行的数据。
发布于 2016-12-02 12:23:19
检查以下行:
foreach ($condition as $key => $condition) {
$detailorder = new DetailOrder;
// here you are creating a new object on each iteration, means on each iteration new object overrides old one, that's why you are getting the last record only
}要解决此问题,请将此对象创建代码放在循环之外,然后重试。
https://stackoverflow.com/questions/40924751
复制相似问题