我想在將訂單添加到購物車時減少產品表中的數量,現在當我向購物車添加東西時,正確的數量沒有減少。例如,如果我下 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表中減去它嗎?如果是,那么如何?
uj5u.com熱心網友回復:
首先要注意幾點,
您不應
$this->mount()從 Livewire呼叫或任何其他生命周期掛鉤。如果您的 mount-method 中有代碼,您需要再次運行,然后將其抽象為一個單獨的方法,并從您的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
}
如果您仍然遇到問題,那么它不可能是這段代碼,或者您以某種方式誤讀了您的資料 - 在任何情況下,如果您仍然遇到問題,您將需要提供有關表結構、模型的其他資訊,您如何呼叫此方法,以及您的操作前后的資料。
uj5u.com熱心網友回復:
看來你在這一行有問題:
$newStock=$getProductStock['quantity'] - $carts['product_qty'];
$carts 是一個物件而不是陣列,因此,請執行以下操作:
$newStock = $getProductStock['quantity'] - $carts->product_qty;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399645.html
