在 laravel 下订单时减少库存数量

decrease stock quantity at order placement in laravel

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

这是我的 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 table 而不是购物车 table 中减去它吗?如果是那么怎么办?

你这行好像有问题:

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

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

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

首先要注意几件事,

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

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