如何将数据保存到数据库中

3
在我的数据库中,我有一列类似于id、product_id、company_name、service、qty、delivery_cost、delivery_date、order_status的内容。
在我的视图中,我使用了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";
} 

我尝试过这种方法,但是由于循环中还有一个循环,所以它会多次存储相同的数据。我需要你的帮助将这些数据存储在数据库中。

4个回答

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

如何在用户忘记选择任何一个输入字段(例如服务、数量或成本)时,无误地插入数据。如果我不想使用验证,但仍希望将其原样插入数据库,该怎么办? - Ranjeet Karki
您可以使用 ->default()->nullable() 为每个列定义默认值。 - Alexey Mezenin
$db->delivery_cost = isset($data['delivery_cost'][$i]) ? $data['delivery_cost'][$i] : 0; or if you're using PHP7 $db->delivery_date = $data['delivery_date'][$i] ?? 0 - Alexey Mezenin

1

如果你想使用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";

希望这可以帮助你。如果有任何疑问,请问。

1

如果所有请求参数都存在于单个表中,那么请使用批量插入而不是为每个插入运行新的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);

如何在用户忘记选择任何一个输入字段(例如服务、数量或成本)时,无误地插入数据。如果我不想使用验证,但想将其原样插入数据库。 - Ranjeet Karki

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接