使用 Laravel 添加到购物车时删除手头的物品
Delete items on hand when added to cart with Laravel
我正在构建一个小型电子商务网站,希望能够在某人的购物车中添加或删除商品时更新现有库存。在我的购物车控制器中,我有四个功能:一个添加项目,一个增加项目,一个减少项目,一个删除项目。这是相关代码:
public function addItemToCart(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
$product = Product::find($id);
$cart->addItem($id, $product);
$request->session()->put('cart', $cart);
return redirect()->route("home");
}
public function increaseSingleProduct(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
$product = Product::find($id);
$cart->addItem($id, $product);
$request->session()->put('cart', $cart);
return redirect()->back();
}
public function decreaseSingleProduct(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
if( $cart->items[$id]['quantity'] > 1) {
$product = Product::find($id);
$cart->items[$id]['quantity'] = $cart->items[$id]['quantity']-1;
$cart->items[$id]['totalSinglePrice'] = $cart->items[$id]['quantity'] * $product['price'];
$cart->updatePriceAndQunatity();
$request->session()->put('cart', $cart);
}
return redirect()->back();
}
public function deleteItemFromCart(Request $request, $id) {
$cart = Session::get('cart');
if(array_key_exists($id, $cart->items)){
unset($cart->items[$id]);
}
$prevCart = $request->session()->get("cart");
$updatedCart = new Cart($prevCart);
$updatedCart->updatePriceAndQunatity();
$request->session()->put("cart",$updatedCart);
return redirect()->route('shopping cart');
}
这里的数量不是指手头的数量,而是指购物车中的数量。在产品 table 中,我有一个名为 stock_quantity 的列。理想情况下,这是我希望在执行每个功能时更新的内容。
我可能没有理解你问题的复杂性。难道你只需要找到产品并增加或减少吗?
$product = Product::findOrFail($item_id);
$product->stock_quantity++; // or --
$product->save();
虽然您添加到购物车时我不会这样做。我会在结账时这样做,这样你就不会把你的库存放在一个废弃的购物车上。或者,如果您确实需要在购物车中有东西时提交您的库存,请实施一个函数以在已放弃的情况下删除已提交的库存。
我正在构建一个小型电子商务网站,希望能够在某人的购物车中添加或删除商品时更新现有库存。在我的购物车控制器中,我有四个功能:一个添加项目,一个增加项目,一个减少项目,一个删除项目。这是相关代码:
public function addItemToCart(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
$product = Product::find($id);
$cart->addItem($id, $product);
$request->session()->put('cart', $cart);
return redirect()->route("home");
}
public function increaseSingleProduct(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
$product = Product::find($id);
$cart->addItem($id, $product);
$request->session()->put('cart', $cart);
return redirect()->back();
}
public function decreaseSingleProduct(Request $request, $id) {
$prevCart = $request->session()->get('cart');
$cart = new Cart($prevCart);
if( $cart->items[$id]['quantity'] > 1) {
$product = Product::find($id);
$cart->items[$id]['quantity'] = $cart->items[$id]['quantity']-1;
$cart->items[$id]['totalSinglePrice'] = $cart->items[$id]['quantity'] * $product['price'];
$cart->updatePriceAndQunatity();
$request->session()->put('cart', $cart);
}
return redirect()->back();
}
public function deleteItemFromCart(Request $request, $id) {
$cart = Session::get('cart');
if(array_key_exists($id, $cart->items)){
unset($cart->items[$id]);
}
$prevCart = $request->session()->get("cart");
$updatedCart = new Cart($prevCart);
$updatedCart->updatePriceAndQunatity();
$request->session()->put("cart",$updatedCart);
return redirect()->route('shopping cart');
}
这里的数量不是指手头的数量,而是指购物车中的数量。在产品 table 中,我有一个名为 stock_quantity 的列。理想情况下,这是我希望在执行每个功能时更新的内容。
我可能没有理解你问题的复杂性。难道你只需要找到产品并增加或减少吗?
$product = Product::findOrFail($item_id);
$product->stock_quantity++; // or --
$product->save();
虽然您添加到购物车时我不会这样做。我会在结账时这样做,这样你就不会把你的库存放在一个废弃的购物车上。或者,如果您确实需要在购物车中有东西时提交您的库存,请实施一个函数以在已放弃的情况下删除已提交的库存。