【问题标题】:Laravel save multiple form to databaseLaravel 将多个表单保存到数据库
【发布时间】:2016-12-04 16:11:34
【问题描述】:

我想用 laravel 将多个输入表单保存到数据库中,当我使用 dd 检查时很好,但是如何将其保存到数据库中?

这里是我的控制器

 public function store(Request $request){
  $input = Input::all();
    $servicedata = $input['service_id'];
    $employeedata = $input['emp_id'];
    $allOrder = array();

    foreach ($employeedata as $key => $val) {
        $detailorder = new DetailOrder;
        $detailorder->employee_id = $input['emp_id'][$key];
        $detailorder->mandays = $input['mandays'][$key];

        foreach ($servicedata as $key => $val) {

            $detailorder->sales_order_id = $request->sales_order_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->note = $input['note'][$key];
        }
        $allOrder[]=$detailorder;
    }
     //dd($allOrder);
    $allOrder->save();
}

当我尝试使用 $detailorder->insert($allOrder); 时,我收到这样的错误

SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列 '0'(SQL:插入到 detail_orders (0) 值({"employee_id":"2","mandays" :"3","sales_order_id":"1","serivce_id":"2","order_type":"change","select_plan":"plan 2","qty":"1","unit_price": "300","note":"测试 2"}))

-->已编辑

我的dd 结果

array:2 [?
  0 => DetailOrder {#262 ?
#attributes: array:9 [?
  "sales_order_id" => "4"
  "serivce_id" => "1"
  "order_type" => "add"
  "select_plan" => ""
  "qty" => "1"
  "unit_price" => "200"
  "note" => ""
  "employee_id" => "2"
  "mandays" => "3"
]

1 => DetailOrder {#268 ?
#attributes: array:9 [?
  "sales_order_id" => "4"
  "serivce_id" => "2"
  "order_type" => "change"
  "select_plan" => ""
  "qty" => "1"
  "unit_price" => "300"
  "note" => ""
  "employee_id" => "2"
  "mandays" => "3"
]

我的表格捕获

【问题讨论】:

  • 请显示 dd($allOrder) 的输出和表格的截图。
  • $detailorder->save(); 试试看
  • 嗨@Md.Abutaleb 我一直在更新我的问题
  • @ChoncholMahmud 只是保存最后的数据,不是吗?
  • 它将保存所有数据。使用$detailorder->save();而不是$allOrder->save();

标签: php mysql laravel


【解决方案1】:

你可以在循环内保存

public function store(Request $request){
 $input = Input::all();
 $servicedata = $input['service_id'];
 $employeedata = $input['emp_id'];
 $allOrder = array();

 foreach ($employeedata as $key => $val) {
    $detailorder = new DetailOrder;
    $detailorder->employee_id = $input['emp_id'][$key];
    $detailorder->mandays = $input['mandays'][$key];

    foreach ($servicedata as $key => $val) {

        $detailorder->sales_order_id = $request->sales_order_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->note = $input['note'][$key];
    }
    $detailorder->save();
 }
}

【讨论】:

    【解决方案2】:

    按订单型号:

    Protected $fillable = ['employee_id', 'mandays', 'sales_order_id', 'service_id', 'order_type', 'select_plan', 'qty', 'unit_price', 'note'];
    

    在您的控制器上,请尝试在第一个 foreach 之外为 $allOrder 使用 foreach 循环:

    public function store(Request $request)
    {
        $input = Input::all();
        $servicedata = $input['service_id'];
        $employeedata = $input['emp_id'];
        $allOrder = array();
    
        foreach ($employeedata as $key => $val) {
            $detailorder = new DetailOrder;
            $detailorder->employee_id = $input['emp_id'][$key];
            $detailorder->mandays = $input['mandays'][$key];
    
            foreach ($servicedata as $key => $val) {
    
                $detailorder->sales_order_id = $request->sales_order_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->note = $input['note'][$key];
            }
            $allOrder[] = $detailorder;
        }
        //dd($allOrder);
    
        foreach ($allOrder as $order) {
            YourOrderModelName::create($order);
        }
    
    }
    

    【讨论】:

    • 嗨,我按照你的方式,但我收到这样的错误 SQLSTATE[HY000]: General error: 1364 Field 'sales_order_id' doesn't have a default value (SQL: insert into detail_orders` (updated_at, created_at) 值 (2016-12-04 11:44:46, 2016-12-04 11:44:46))`
    • 您必须在数据库中为 sales_order_id 设置可为空。不管怎样,我认为你的问题已经解决了。
    猜你喜欢
    • 2018-05-08
    • 2015-10-16
    • 2019-08-21
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2018-12-17
    • 2017-12-03
    • 2013-10-05
    相关资源
    最近更新 更多