【问题标题】:decrease stock quantity at order placement in laravel在laravel下订单时减少库存数量
【发布时间】:2021-12-29 22:05:02
【问题描述】:

我想在将订单添加到购物车时减少产品表中的数量,现在当我将某些东西添加到购物车时,正确的数量并没有减少。例如,如果我订购了 6 件商品,那么我的产品表中会随机减少一个数量。

这是我在 livewire 订单控制器中的代码:

public function IncrementQty($cartId)
{
    $carts=Cart::find($cartId);

    $carts->increment('product_qty',1);
    $updatePrice=$carts->product_qty * $carts->product->price;
    $carts->update(['product_price'=>$updatePrice]);

    $getProductStock=Product::where(['id'=>$carts['product_id']])->first()->toArray();
    $newStock=$getProductStock['quantity'] - $carts['product_qty'];
    Product::where(['id'=>$carts['product_id']])->update(['quantity'=>$newStock]);
    
    $this->mount();
}

作为初学者,我无法理解这里出了什么问题。我应该从 orderDetails 表而不是 carts 表中减去它吗?如果是那怎么办?

【问题讨论】:

  • 一个购物车只能有 1 个产品? ...顺便说一句,您可以使用查询生成器的 incrementdecrement 方法,而不是自己做数学来减少数量
  • 在实际下订单之前,我不会从“库存”中减去
  • 不,那个1是点击时购物车中的产品数量增加一个。我现在面临的唯一问题是下订单时产品库存随机减少。
  • 您的意思是“下订单时产品库存随机减少”?你的表结构是什么样的?
  • @Qirel 表示例如当我在购物车中添加数量 3 时,然后从产品表中减少 5、6 或任何随机数量。我的 products 表包含 product_name、数量、成本、价格和 alert_stock 列。

标签: laravel eloquent laravel-8 laravel-livewire


【解决方案1】:

首先要注意几点,

  1. 您不应从 Livewire 调用 $this->mount() 或任何其他生命周期挂钩。如果您的 mount-method 中有代码,您需要再次运行,然后将其抽象为一个单独的方法,并从您的 mount() 方法和您的 IncrementQty() 方法中调用它。

  2. 您可以使用模型路由绑定将正确的模型注入方法中

    public function IncrementQty(Cart $cart)
    

然后您可以通过直接在购物车上使用product 关系并在其上调用decrement() 来简化您的代码。

public function IncrementQty(Cart $cart)
{
    $product = $cart->product;
    $cart->increment('product_qty', 1);
    $cart->update(['product_price' => $cart->product_qty * $product->price]);

    $product->decrement('quantity', 1);
    
    $this->mount(); // Do not call mount manually, abstract the contents you need into a separate method instead
}

如果您仍然遇到问题,那么它不可能是这段代码,或者您以某种方式误读了您的数据 - 无论如何,如果您仍然遇到问题,您需要在表格中提供其他信息 -结构、模型、调用此方法的方式以及操作前后的数据。

【讨论】:

    【解决方案2】:

    这行好像有问题:

    $newStock=$getProductStock['quantity'] - $carts['product_qty'];
    

    $carts 是一个对象而不是一个数组,所以,这样做:

    $newStock = $getProductStock['quantity'] - $carts->product_qty;
    

    【讨论】:

    • 谢谢,但库存中的随机数量仍在减少:(
    • 如果 $carts 是一个 Eloquent 模型,它支持数组访问
    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 2017-01-28
    • 2017-11-13
    • 2018-07-01
    • 1970-01-01
    • 2016-09-26
    • 2017-11-27
    • 2020-09-05
    相关资源
    最近更新 更多