所有用户的购物车都相同Laravel

时间:2019-06-11 01:23:28

标签: php laravel laravel-5

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

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

ProductController.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);

2 个答案:

答案 0 :(得分:-1)

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

只需在“产品”表中再添加一个字段(如userID),然后在其中保存用户ID。

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

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

希望这会起作用。

答案 1 :(得分:-1)

在Laravel中,您无法将if all(int(digit) % 2 == 0 for digit in s): where结合使用,它将无法工作。最好使用find,然后使用where来检索单个模型

first

请查看此链接Retrieving Single Models / Aggregates