首页 > 解决方案 > 购物车对所有用户都一样 Laravel

问题描述

我正在使用 laravel 开展一个项目,我希望每个用户都有自己的购物车,这意味着如果用户将商品添加到购物车、删除或更新它应该只显示在他的帐户中而不会影响其他用户。目前,当用户添加或删除项目时,它会显示在所有用户中。

我尝试了其他来源的一些解决方案,但没有奏效。

产品控制器.php

public function cart()
{
    return view('cart');
}

public function addToCart($id)
{
    $userId = Auth::user()->id;
    $products = products_model::where('user_id', $userId)->find($id); 

    if(!$products) {
        abort(404);
    }

    $cart = session()->get('cart');

    // if cart is empty then this the first product
    if(!$cart) {

        $cart = [
            $id => [
                "pro_name" => $products->pro_name,
                "quantity" => 1,
                "pro_price" => $products->pro_price,
                "image" => $products->image
            ]
        ];

        session()->put('cart', $cart);

        return redirect()->back()
                    ->with('success', 'Product added to cart successfully!');
    }

    // if cart not empty then check if this product exist then increment quantity
    if(isset($cart[$id])) {

        $cart[$id]['quantity']++;

        session()->put('cart', $cart);

        return redirect()->back()
                    ->with('success', 'Product added to cart successfully!');

    }

    // if item not exist in cart then add to cart with quantity = 1
    $cart[$id] = [
        "pro_name" => $products->pro_name,
        "quantity" => 1,
        "pro_price" => $products->pro_price,
        "image" => $products->image
    ];

    session()->put('cart', $cart);

    return redirect()->back()
                ->with('success', 'Product added to cart successfully!');
}

public function update(Request $request)
{
    if($request->id and $request->quantity)
    {
        $cart = session()->get('cart');

        $cart[$request->id]["quantity"] = $request->quantity;

        session()->put('cart', $cart);

        session()->flash('success', 'Cart updated successfully');
    }
}

public function remove(Request $request)
{
    if($request->id) {

        $cart = session()->get('cart');

        if(isset($cart[$request->id])) {

            unset($cart[$request->id]);

            session()->put('cart', $cart);
        }

        session()->flash('success', 'Product removed successfully');
    }
}

我试图添加这些行(添加到购物车)但没有用。

$userId = Auth::user()->id;
$products = products_model::where('user_id', $userId)- >find($id);

标签: phplaravellaravel-5

解决方案


是的,你可以做到。它称为复制

只需在 Products 表中再添加一个字段,如 userID 并在其上保存用户 ID。

要向所有用户展示产品,只需输入顶部 ID(第一个 ID,可能是系统管理员 ID)

因此,每当您想要显示、编辑、更新或删除时,您只需使用产品 ID 和用户 ID 即可。

希望这会奏效。


推荐阅读