[英]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 table
和ordersproducts 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.