在 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;
首先要注意几件事,
您不应从 Livewire 调用 $this->mount()
或任何其他生命周期挂钩。如果您的挂载方法中有代码,您需要再次 运行,然后将其抽象为一个单独的方法,并从您的 mount()
方法和 IncrementQty()
方法中调用它。
您可以使用模型路由绑定将正确的模型注入到方法中
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-结构、模型、调用此方法的方式以及操作前后的数据。
我想在订单添加到购物车时减少产品 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;
首先要注意几件事,
您不应从 Livewire 调用
$this->mount()
或任何其他生命周期挂钩。如果您的挂载方法中有代码,您需要再次 运行,然后将其抽象为一个单独的方法,并从您的mount()
方法和IncrementQty()
方法中调用它。您可以使用模型路由绑定将正确的模型注入到方法中
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-结构、模型、调用此方法的方式以及操作前后的数据。