Laravel 5.1 - 在我的数据库中存储foreach会话

时间:2016-05-26 17:53:42

标签: php mysql laravel laravel-5.1

这适用于电子商务网站,我在桌面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)
  •   

实际上,我的控制器删除了具有相同会话的产品,并且只存储最后添加的产品而不是我的会话购物车中的所有产品。 enter image description here enter image description here

0 个答案:

没有答案