繁体   English   中英

Laravel 8 更新购物车中的产品(如果存在)

[英]Laravel 8 update product in cart if exists

我正在使用带有darryldecode/laravelshoppingcart购物车包的 Laravel 8。 如果用户购物车中存在产品数量,我会在更新产品数量方面遇到一些困难。 例如:如果购物车是空的,当添加一个产品然后在“添加到购物车”上多次点击时,它只会添加一个产品,然后将数量更新为最大。 但是当我添加第二个产品,然后再次添加产品 1 时,它会将另一个产品添加到购物车。 它绝对不应该添加另一个产品,但它必须限制在第一个产品的最大数量。

我的购物车存储方法:

    public function store(CartStoreRequest $request) {

        $validated = $request->validated();
        $product = Product::findOrFail($validated['product_id']);

        $rowId = uniqid();
        $userID = $validated['user_id'];

        // get current user cart
        $currentCart = \Cart::session($userID);

        if(!empty($currentCart->getContent()->toArray())) {
            foreach($currentCart->getContent() as $item) {
                $productID = $item->associatedModel->id;

                if($productID === $product->id) {
                    $currentCart->update($item->id, [
                        'quantity' => [
                         'relative' => false,
                         'value' => $product->minStock($item->quantity + $validated['quantity']),
                        ]
                    ]);
                } else {
                    $currentCart->add(array(
                        'id' => $rowId,
                        'name' => $product->name,
                        'price' => $product->price->amount(),
                        'quantity' => $validated['quantity'],
                        'associatedModel' => $product,
                        'attributes' => array(
                            'first_image' => $product->firstImage,
                            'formatted_price' => $product->formattedPrice,
                            'product_stock' => $product->stockCount()
                        )
                    ));
                }
            }
        } else {
            $currentCart->add(array(
                'id' => $rowId,
                'name' => $product->name,
                'price' => $product->price->amount(),
                'quantity' => $validated['quantity'],
                'associatedModel' => $product,
                'attributes' => array(
                    'first_image' => $product->firstImage,
                    'formatted_price' => $product->formattedPrice,
                    'product_stock' => $product->stockCount()
                )
            ));
        }

        return redirect()->back();
    }

我希望有人有类似的问题并且知道如何解决这个问题。

好的,所以解决方案是使用产品 ID 作为 $rowId,

        $validated = $request->validated();
        $product = Product::findOrFail($validated['product_id']);

        $rowId = $product->id;
        $userID = $validated['user_id'];
        $currentCart = \Cart::session($userID);

        $currentCart->add(array(
            'id' => $rowId,
            'name' => $product->name,
            'price' => $product->price->amount(),
            'quantity' => $product->minStock($validated['quantity']),
            'associatedModel' => $product,
            'attributes' => array(
                'first_image' => $product->firstImage,
                'formatted_price' => $product->formattedPrice,
                'product_stock' => $product->stockCount()
            )
        ));

        $currentCartContents = $currentCart->get($rowId);
        $quantity = $product->minStock($currentCartContents->quantity);

        if($currentCartContents->quantity !== $quantity) {
            $currentCart->update($rowId, [
                'quantity' => [
                 'relative' => false,
                 'value' => $quantity,
                ]
            ]);
        }

        return redirect()->back();

暂无
暂无

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

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