繁体   English   中英

Laravel-存储购物车中有多个数据到数据库

[英]Laravel - Storing a shopping cart has Multiple Data to the Database

我已经创建了这个在线购物车,如果买家用一个结帐商品进行购物,效果很好,但是当买家使用多个商品购物时,会出现问题。

我需要帮助,以便可以将购物车中的物品全部放入数据库中。 我的问题是将购物车中的多个产品作为单独的行插入数据库中。 有人可以帮忙吗?

我想要这个,是因为购买的物品可以由购买该物品的买家检查。 这样我就可以获得“ product_id”。

表: 订单

列:

id int(10) UN AI PK
user_id int(11) 
product_id int(11) 
item_name text 
payment varchar(255) 
courier varchar(255) 
note text 
quantity int(11) 
total int(11) 
status int(11)

OrderController.php

public function NewOrder(Request $request)
{
    $this->validate($request, [
        'payment' => 'required',
        'courier' => 'required',
    ]);
    $cart = Session::get('cart');
    $total = 0;
    foreach ($cart as $data) {
        $total_harga = $data['harga'] * $data['qty'];
        $qty = $data['qty'];
    }
    $quantity = $qty + 0;

    $new = new Orders();
    $new->user_id = Auth::user()->id;
    $new->product_id = $data['id'];
    $new->item_name = $data['item_name'];
    $new->payment = $request['payment'];
    $new->courier = $request['courier'];
    $new->note = $request['note'];
    $new->quantity = $quantity;
    $new->total = $total_harga;
    $new->status = 1;
    $new->save();
    $id = $new->id;
    Session::forget('cart');
    return redirect()->route('order.status', $id);
}

如何将购物车中的多个产品作为单独的行插入数据库中?

感谢您的回答 :)

要在数据库中添加多个有序项目,您必须添加2个表。 订单订单 产品

ordersproducts订单后添加所有ordered items ,请再创建一个表格,如ordersproducts ,在其中您将添加商品详细信息,例如产品ID,产品名称,描述,单价,数量,并且orders表必须仅包含订单的主要详细信息(例如订单)数字,用户ID,产品总数,总金额,订单日期。 因此, orders tableordersproducts table将如下所示:

表:订单

id int(10) UN AI PK
user_id int(11) 
payment varchar(255) 
courier varchar(255) 
note text 
total_quantity int(11) 
total_amount int(11) 
status int(11)

表:订单产品

id int(10) UN AI PK
order_id int(11) 
product_id int(11) 
item_name text 
quantity int(11) 
price int(11) 

OrderController.php

public function NewOrder(Request $request)
{
$this->validate($request, [
    'payment' => 'required',
    'courier' => 'required',
]);
$cart = Session::get('cart');
$total = 0;
foreach ($cart as $data) {
    $total_harga = $data['harga'] * $data['qty'];
    $qty = $data['qty'];
}
$quantity = $qty + 0;

$new = new Orders();
$new->user_id = Auth::user()->id;
$new->payment = $request['payment'];
$new->courier = $request['courier'];
$new->note = $request['note'];
$new->total_quantity = $quantity;
$new->total_amount = $total_harga;
$new->status = 1;
$new->save();

$order_id = DB::getPdo()->lastInsertId();

foreach ($cart as $data) {
    $total_harga = $data['harga'] * $data['qty'];
    $qty = $data['qty'];
    $OrderPro = new Ordersproducts;
    $OrderPro->order_id = $order_id;
    $OrderPro->product_id = $data['product_id'];
    $OrderPro->product_name = $data['product_name'];
    $OrderPro->product_price = $data['product_price'];
    $OrderPro->product_quantity = $data['product_quantity'];
    $OrderPro->save();
}

Session::forget('cart');
return redirect()->route('order.status', $id);
}

请根据您的要求在上述代码中进行更改。 我刚刚给您一个提示,以便您可以创建2个表,一个表用于存储订单的主要详细信息,而另一个表则用于存储所需的完整产品订购的详细信息。

您可以创建这些产品的数组,以使$products包含要插入的所有行。 您可以使用laravel createMany选项同时插入多行

$products=[$product1, $product2, $product3....$productn];
$orders =Orders::insert($products);

您的代码也可以重写为

        $cart = Session::get('cart');  //all items in cart
            $total=0;
            $products=[];
            foreach ($cart as $data) {  //for each of the item
                $row=[];
                $row['total']= $data['harga'] * $data['qty'];
                $row['quantity']=  $data['qty'];
                $row['user_id'] = Auth::user()->id;
                $row['product_id'] = $data['id'];
                $row['item_name'] = $data['item_name'];
                $row['payment'] = $request['payment'];
                $row['courier'] = $request['courier'];
                $products[] =$row;  //add row 
           }

        $orders =Orders::insert($products);

    print_r($orders);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM