【问题标题】:How to save it in database如何将其保存在数据库中
【发布时间】:2017-05-02 23:54:16
【问题描述】:

在我的数据库中,我有 id,product_id,company_name,service,qty,delivery_cost,delivery_date,order_status etc. 之类的列

我查看我使用 Jquery 和 Html 和 jquery 在单击添加更多按钮时动态添加更多输入字段 product_id、service、delivery_cost、qty、delivery_date、order_status。在提交表单时,我在控制器中得到了这个 dd($allData);

我的问题是如何将这些数据保存在数据库中

array:8 [▼
  "_token" => "gSddIeA11OBV60xU9YiDXn8fmsfkwxlQ85QmDdkQ"

  "service" => array:3 [▼
    0 => "cement"
    1 => "iron"
    2 => "steel"
  ]
  "qty" => array:3 [▼
    0 => "5"
    1 => "44"
    2 => "5"
  ]
  "delivery_cost" => array:3 [▼
    0 => "5465"
    1 => "553"
    2 => "554"
  ]
  "delivery_date" => array:3 [▼
    0 => "2016-12-16"
    1 => "2016-12-08"
    2 => "2016-12-17"
  ]
  "order_status" => "Confirm"
  "delivery_vehicle" => array:1 [▼
    0 => "Self_elivery"
   1 => "Self_elivery"
   2 => "Self_elivery"
  ]
]
public function store(Request $request)
    {
        $allData= $request->all();
        dd($allData);
         $product = new Order;


   }

我试试这个

public function store(Request $request)
    {


        $date = $request->get('delivery_date');
        $cost = $request->get('delivery_cost');
        $service = $request->get('service');//add quotes next to service

        foreach($date as $deliveryDate)
        {
           foreach($cost as $proAmount){
            $db = new Order;
            $db->delivery_date = $deliveryDate;
            $db->amount = $proAmount;
            $db->save();

        }
}
        return"ok";
} 

我试过这种方式,但它多次存储相同的数据可能是因为循环内的循环。我需要你的帮助来将这些数据存储在数据库中

【问题讨论】:

    标签: php jquery database laravel laravel-5.3


    【解决方案1】:

    使用for() 应该适合你:

    $data = $request->all();
    
    for ($i = 0; $i < count($data['delivery_date']); $i++) {
        $db = new Order;
        $db->delivery_date = $data['delivery_date'][$i];
        $db->delivery_cost = $data['delivery_cost'][$i];
        ....
        $db->save();
    }
    

    【讨论】:

    • 如果用户忘记选择任何一个输入字段,如服务或数量或成本,我如何插入数据而不出错。如果我不想使用验证但想插入数据库中的数据跨度>
    • 您可以使用-&gt;default()-&gt;nullable() 为每一列定义默认值
    • $db-&gt;delivery_cost = isset($data['delivery_cost'][$i]) ? $data['delivery_cost'][$i] : 0; 或者如果您使用的是 PHP7 $db-&gt;delivery_date = $data['delivery_date'][$i] ?? 0
    【解决方案2】:

    你可以试试这个如果你想用foreach $key会给你索引。

            $date = $request->get('delivery_date');
            $cost = $request->get('delivery_cost');
            $service = $request->get('service');
    
            foreach($date as $key=>$deliveryDate)
            {
                $db = new Order;
                $db->delivery_date = $deliveryDate;
                $db->amount = $cost[$key];
                $db->save();
            }
    
            return"ok";
    

    希望这对您有所帮助。询问是否有任何疑问

    【讨论】:

      【解决方案3】:

      进行批量插入,而不是为每个插入运行新的 sql 查询(如果所有请求参数都存在于单个表中)。

        $data = [];
      
        foreach ($request->all() as $param => $val) {
          if( is_array($val) ) // Ignore string params. i.e. _token, order_status
          {
            foreach ($val as $key => $value) {
      
              $data[$index][$param] = $value;
              $data[$index]['created_at'] = \Carbon\Carbon::now();
              $data[$index]['updated_at'] = \Carbon\Carbon::now();
      
              $index++;
            }
            $index = 0;
          }
        }
      
        Model::insert($data);
      

      【讨论】:

      • 如果用户忘记选择任何一个输入字段,如服务或数量或成本,我如何插入数据而不出错。如果我不想使用验证但想插入数据库中的数据跨度>
      【解决方案4】:
      Using foreach() should work for you very easy:
      
      $inputdata = $request->all();
      
      foreach ($inputdata as $key=>$val) {
      
          $dbdata = new Order;
          $dbdata ->delivery_date = $data['delivery_date'][$key];
          $dbdata ->delivery_cost = $data['delivery_cost'][$key];
          ....   
          $dbdata ->save();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-06
        • 2019-09-29
        • 2011-10-29
        相关资源
        最近更新 更多