【问题标题】:Laravel insert multiple input form to databaseLaravel 向数据库插入多个输入表单
【发布时间】:2016-12-02 04:20:03
【问题描述】:

我已经创建了一个如下图所示的多输入表单,我想保存到数据库中,问题是当我使用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);

        });
   });
}

【问题讨论】:

    标签: php jquery laravel


    【解决方案1】:

    我不知道你的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
    

    【讨论】:

      【解决方案2】:

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

      请注意,save() 应从 foreach 循环中调用,以将每一行保存到数据库。

      考虑到你的 JavaScript 工作正常,以上修改会保存你数据库中每一行的数据。

      【讨论】:

        【解决方案3】:

        检查以下行:

        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
        }
        

        要解决此问题,请将此对象创建代码放在循环之外,然后重试。

        【讨论】:

          【解决方案4】:

          您可以使用此代码插入多个项目:

          DB::table('tablename')->insert($tableitems);
          

          【讨论】:

            猜你喜欢
            • 2017-04-03
            • 2016-11-13
            • 1970-01-01
            • 2015-05-23
            • 2021-09-10
            • 2017-06-07
            • 1970-01-01
            • 2016-04-03
            • 2013-12-07
            相关资源
            最近更新 更多