【问题标题】:Delete items on hand when added to cart with Laravel使用 Laravel 添加到购物车时删除手头的物品
【发布时间】:2020-07-01 22:52:41
【问题描述】:

我正在建立一个小型电子商务网站,并希望能够在某人的购物车中添加或删除商品时更新手头的库存。在我的购物车控制器中,我有四个功能:一个添加商品,一个增加商品,一个减少商品,一个删除商品。这是代码:

     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'); 
}

这里的数量不是指手头的数量,是指购物车中的数量。在产品表中,我有一个名为 stock_quantity 的列。理想情况下,这是我希望在执行每个功能时更新的内容。

【问题讨论】:

  • 你有什么问题?
  • @Drewster 如何在执行每个函数时更新 stock_quantity。因此,如果有人将 1 件商品添加到购物车中,我希望在数据库中更新该库存数量。

标签: php laravel e-commerce


【解决方案1】:

我可能无法理解您的问题的复杂性。你不只需要找到产品并增加或减少吗?

$product = Product::findOrFail($item_id);
$product->stock_quantity++; // or --
$product->save();

不过,当您添加到购物车时,我不会这样做。我会在结帐时这样做,这样您就不会将库存留在废弃的购物车中。或者,如果您确实需要在有人在购物车中有东西时提交您的库存,请实现一个函数以在已放弃的情况下移除已提交的库存。

【讨论】:

  • 我有点反复讨论是否应该实施。但我认为您在客户结账时可能是最好的选择是正确的。我将在结帐控制器中尝试此代码。
  • 我将此添加到我的结帐控制器中,但出现错误。编辑上面的控制器代码以反映这一点会有帮助吗?或者只是发布一个全新的问题?
  • 忽略这一点,我稍微调整了您的示例并使其正常工作。
  • 你做了什么让它发挥作用?我将编辑答案,以便在其他人需要时正确。
  • @NateScott 已更正。
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 2017-02-07
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2011-12-19
相关资源
最近更新 更多