Корзина покупок одинакова для всех пользователей Laravel - PullRequest
1 голос
/ 11 июня 2019

Я работаю над проектом с 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 голосов
/ 11 июня 2019

В Laravel вы не можете объединить where с find, это не сработает. Лучше использовать where, а затем first, чтобы получить одну модель

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

Пожалуйста, посмотрите по этой ссылке Получение отдельных моделей / агрегатов

0 голосов
/ 11 июня 2019

Да, вы можете сделать.Она называется Репликация .

Просто добавьте еще одно поле, например userID, в таблицу «Продукты» и сохраните в ней идентификатор пользователя.

Чтобы показывать продукты всем пользователям, просто поставьте top id (первый идентификатор, вероятно, идентификатор системного администратора)

Так что каждый раз, когда вы хотите показать, редактировать, обновить или удалить, вы просто делаете с идентификатором продукта, а также идентификатором пользователя.

Надеюсь, это будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...