这适用于电子商务网站,我在桌面CartItems
中更新存储会话购物车时遇到问题。当用户添加产品时,我的控制器会将所有信息放入我的会话cart
。
我创建了product_session = category + productID + color + size,所以我可以 区分产品变化。
我的问题是,在更新会话cart
后(它运作良好)我需要使用会话购物车的所有产品更新我的表CartItems
。我不知道为什么我的控制器只更新购物车会话中最后添加的产品。
我的控制器CartController.php:
public function add(Product $product, CartSession $CartSession,Request $request)
{
$id = $request->get('id');
$cart = \Session::get('cart'); // ricevo la var di sessione cart e la salvo su cart
foreach($cart as $producto){
$product_exist = $producto->id;
}
if(isset($product_exist)) {
if($product_exist == $product->id
&& $producto->color != $request->get('color')
|| $producto->size != $request->get('size') ) {
$product->quantity = $request->get('qty');
$product->size = $request->get('size');
$product->color = $request->get('color');
$product->category = $request->get('category');
$cart[$product->category.$product->id.$product->size.$product->color] = $product;
\Session::put('cart', $cart);
//return $cart;
}
if($product_exist == $product->id
&& $producto->color == $request->get('color')
&& $producto->size == $request->get('size') ) {
$product->quantity = $request->get('qty')+$producto->quantity;
$product->size = $request->get('size');
$product->color = $request->get('color');
$product->category = $request->get('category');
$cart[$product->category.$product->id.$product->size.$product->color] = $product;
\Session::put('cart', $cart);
} // fine if
}else {// fine if isserT, Se non ci sono prodotti già esistenti
$product->quantity = $request->get('qty');
$product->size = $request->get('size');
$product->color = $request->get('color');
$product->category = $request->get('category');
$cart[$product->category.$product->id.$product->size.$product->color] = $product;
\Session::put('cart', $cart);
}
//return $cart;
$subtotal = 0;
foreach($cart as $producto){
$subtotal += $producto->quantity * $producto->price;
}
$session_code = Session::getId();
//$CartSession = new CartSession();
$session_exist = CartSession::where('session_code', $session_code)->orderBy('id', 'desc')->first();
if (isset($session_exist)) {
$s = new CartSession;
$data = array(
'subtotal' => $subtotal,
);
$s->where('session_code', '=', $session_code)->update($data);
}else {
$CartSession = new CartSession();
$CartSession->session_code = $session_code;
$CartSession->subtotal = $subtotal;
$CartSession->save();
}
foreach($cart as $producto){
$this->saveCartItem($producto, $CartSession->id,$cart);
}
return redirect()->route('cart-show');
}
protected function saveCartItem($producto, $CartSession_id,$cart)
{
$session_code = Session::getId();
$get_items = CartItem::where('session_code', $session_code);
$deleted=$get_items->delete();
$get_id = CartSession::where('session_code', $session_code)->orderBy('id', 'desc')->first();
$CartItem = new CartItem();
$CartItem->price = $producto->price;
$CartItem->quantity = $producto->quantity;
$CartItem->size = $producto->size;
$CartItem->color = $producto->color;
$CartItem->category = $producto->category;
$CartItem->product_session = $producto->category.$producto->id.$producto->size.$producto->color;
$CartItem->product_id = $producto->id;
$CartItem->session_id = $get_id->id;
$CartItem->session_code = $session_code;
$CartItem->save();
}
方法saveCartItem
的过程是:
- 获取具有相同会话的所有商品并将其删除
- 存储我的会话
$cart
的产品(这些新数据已更新,所有产品已添加,数量已更改,ecc)