如何检查购物车中每个产品的库存

Posted

技术标签:

【中文标题】如何检查购物车中每个产品的库存【英文标题】:How to check the stock for each product in the cart 【发布时间】:2021-12-06 06:28:29 【问题描述】:

我将我的购物车存储在 Vuex 中,并通过 API 调用将产品添加到购物车中。我要做的是根据每种产品的库存,我想禁用 API 调用。所以在我的 getetrs 中:

export const checkStock = (state) => 
    let stockAvailable = true;
    state.cart.forEach(item => 
        if(item.product.attributes.stock <= item.amount)
            stockAvailable = false;
        
    )
    return stockAvailable;

我正在检查库存以及库存是否正确。 在我进行 API 调用并将产品添加到购物车的产品组件中,我从 getters.js 文件中获取 checkStock 函数:

checkStockAvailability() 
            return this.$store.getters.checkStock;
        ,
addToCart: function () 
            this.amount = this.itemsCount !== "" ? this.itemsCount : 1;
            if(this.variationId != null) 
                this.warningMessage = false;
                    if(this.checkStockAvailability()) 
                        cartHelper.addToCart(this.product.id, this.variationId, this.amount, (response) => 
                            this.$store.dispatch('addProductToCart', 
                                product: this.product,
                                variation: this.variationId,
                                amount: parseInt(this.amount)
                            )
                        );
                    
             else 
                this.warningMessage = true;
            

        ,

所以这2个函数的作用是:例如,我添加有5只股票的产品1,一旦我添加了这5只,我就不能再添加更多了,这也是正确的。但我也不能添加有足够库存的产品 2。 所以我认为我需要将我的 checkStock 功能更改为产品,但我不知道该怎么做。所以请看看我的问题,让我知道任何建议。

【问题讨论】:

“但我不能同时添加有足够库存的产品 2”。那么,如果您有 5 个产品 A 和 5 个产品 B,那么您可以添加 5 个产品 A 但您不能添加任何产品 B(即使您有产品 B 的库存)?你的措辞有点混乱 是的,就是这样 换句话说:if I have added all stock products for any product, then I can't add any other product in my cart? 例如产品 A 有 5 个库存,产品 B 有 6 个库存,如果我添加 5 次产品 A,则无法添加产品 B。另一种情况,如果我添加 3 次产品 A,我可以添加 6 次产品 B,但这一次,我不能再添加任何东西。因此,checkStock 对一种产品为假,而对其他产品再也不会为真 @Javier M 回答你的问题了吗? 【参考方案1】:

所以,如果我理解正确,当产品 A 有 5 件库存商品,而您购买这 5 件商品时,产品 B(也有 N 件库存商品)也被标记为缺货。

问题似乎出在您的函数checkStock 中,因为您正在执行forEach 操作,并且,一旦您看到一个产品没有足够的可用项目,您将stockAvailable 设置为false,并返回该值。因此,此功能不取决于您要求的产品,但其中任何一个都不足以购买。您需要传递产品名称或 ID(最适合您的)。

作为参考:

export const checkStock = (state, productName) => 
    let stockAvailable = true;
    state.cart.forEach(item => 
        // First, you search for your product
        if(item.product.name === productName) 
          // Then you check if there is enough stock available
          if(item.product.attributes.stock <= item.amount)
              stockAvailable = false;
          
        
    )
    return stockAvailable;

最终的实现将取决于您的item 对象的配置。您可以按 id 而不是 name 搜索。此外,您可以在 state 对象中作为字典搜索此特定产品,而不是遍历所有产品。

【讨论】:

您能否指定我将如何发送产品名称?因为我是从吸气剂那里得到的。请看一下,我更新了我的答案 我添加了这个:checkStockAvailability() return this.$store.getters.checkStock; ,

以上是关于如何检查购物车中每个产品的库存的主要内容,如果未能解决你的问题,请参考以下文章

如果数量超过产品库存,Woocommerce 如何添加消息

Laravel 将相同产品的添加到购物车按钮添加到购物车,数量 +1

在WooCommerce中产品缺货时更改单个添加到购物车文本

SQL多对多,如何检查多行的条件

使用curl和grep检查物品是否有库存状态?

如何使用角度路由将产品添加到购物车?