【问题标题】:laravel session shopping cart - how to increase the quantity if the product already existslaravel session 购物车 - 如果产品已经存在,如何增加数量
【发布时间】:2018-04-18 13:59:21
【问题描述】:

我正在用 laravel 做一个在线购物项目, 但是这里有个问题, 我想如果用户将产品添加到购物车并且已经有相同的产品将添加数量金额

但在我的项目中:如果用户将产品添加到购物车并且已经拥有相同的产品,它将向会话添加一个新的价值项

像这样:

数组:

array:3 [▼
  0 => array:5 [▼
    "id" => 7
    "nama_product" => "adssdsadxx"
    "harga" => 13
    "pict" => "s.gif"
    "qty" => 1
  ]
  1 => array:5 [▼
    "id" => 7
    "nama_product" => "adssdsadxx"
    "harga" => 13
    "pict" => "s.gif"
    "qty" => 1
  ]
  2 => array:5 [▼
    "id" => 7
    "nama_product" => "adssdsadxx"
    "harga" => 13
    "pict" => "s.gif"
    "qty" => 1
  ]
]

我想要这样(如果用户将产品添加到购物车并且已经有相同的产品将添加数量):

数组:

array:1 [▼
  0 => array:5 [▼
    "id" => 7
    "nama_product" => "adssdsadxx"
    "harga" => 39
    "pict" => "s.gif"
    "qty" => "3"
  ]
]

这是我的 ProductsController.php

   public function Cart()
    {
        return view('shop.cart');
    }

    public function addToCart(Request $request, $id)
    {
        $product = DB::select('select * from products where id='.$id);
        $cart = Session::get('cart');
        $cart[] = array(
            "id" => $product[0]->id,
            "nama_product" => $product[0]->nama_product,
            "harga" => $product[0]->harga,
            "pict" => $product[0]->pict,
            "qty" => 1,
        );

        Session::put('cart', $cart);
        Session::flash('success','barang berhasil ditambah ke keranjang!');
        //dd(Session::get('cart'));
        return redirect()->back();
    }

    public function updateCart(Request $cartdata)
    {
        $cart = Session::get('cart');

        $cartQty = 1;

        foreach ($cartdata->all() as $id => $val) 
        {
            if ($cartQty != 1) {
                $cart[$id]['qty'] = $val;
                if ($val < 1) {
                    unset($cart[$id]);
                }
            }
            $cartQty++;
        }
        Session::put('cart', $cart);
        return redirect()->back();
    }

    public function deleteCart($id)
    {
        $cart = Session::get('cart');
        unset($cart[$id]);
        Session::put('cart', $cart);
        return redirect()->back();
    }

非常感谢...

【问题讨论】:

    标签: php laravel session shopping-cart


    【解决方案1】:

    你需要修改一下你的代码:

    public function addToCart(Request $request, $id)
    {
        $product = DB::select('select * from products where id='.$id);
        $cart = Session::get('cart');
        $cart[$product[0]->id] = array(
            "id" => $product[0]->id,
            "nama_product" => $product[0]->nama_product,
            "harga" => $product[0]->harga,
            "pict" => $product[0]->pict,
            "qty" => 1,
        );
    
        Session::put('cart', $cart);
        Session::flash('success','barang berhasil ditambah ke keranjang!');
        //dd(Session::get('cart'));
        return redirect()->back();
    }
    
    public function updateCart(Request $cartdata)
    {
        $cart = Session::get('cart');
    
        foreach ($cartdata->all() as $id => $val) 
        {
            if ($val > 0) {
                $cart[$id]['qty'] += $val;
            } else {
                unset($cart[$id]);
            }
        }
        Session::put('cart', $cart);
        return redirect()->back();
    }
    

    只需按产品 ID 键创建购物车数组。

    【讨论】:

    • 非常感谢,这适用于购物车中的重复产品解决方案,但是如何在用户添加到购物车后在同一产品中添加数量金额?
    • 我改了剧本,请看一下。它应该有帮助))
    【解决方案2】:

    如果产品已经存在则更新产品数量,否则将新产品添加到购物车中。

    注意:确保app/Http/Kernel.php 应该像这样将StartSession 放入protected $middleware

     /**
         * Add product to the cart
         *
         * @return success message
         */
        public function addToCart(Request $request){
            $product = $request->all();
    
            $cart = Session::get('cart');
    
            /*
             * If product already exist into the cart then update QTY of product
             * Othewise add new product into the cart
             */
            if(isset($cart[$product['id']])):
                $cart[$product['id']]['qty'] += 1;
            else:
                $cart[$product['id']] = $product;
                $cart[$product['id']]['qty'] = 1; // Dynamically add initial qty
            endif;
    
            Session::put('cart', $cart);
    
            return Response::json(['success' => true, 'cart_items' => count(Session::get('cart')), 'message' => 'Cart updated.']);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2021-01-31
      • 1970-01-01
      • 2020-06-17
      • 2018-11-07
      • 2014-05-08
      • 1970-01-01
      相关资源
      最近更新 更多