如何在 Laravel 中没有登录用户和登录用户的情况下在会话中存储购物车项目

问题描述 投票:0回答:2

我正在使用这个包

"darryldecode/cart"
来实现 Laravel 中的购物车功能, 使用此方法将商品添加到购物车

  \Cart::session($userID)->add([
            'id' => $productId,
            'name' => $productDetails['name'],
            'price' => $productDetails['price'],
            'quantity' => $productDetails['quantity'],
            'attributes' => [],
            'associatedModel' => $productDetails,
        ]);

但我怀疑如果用户未登录,那么我们将如何将商品添加到购物车,并在用户登录后将产品与登录的用户 ID 相关联。

任何解决方案谢谢

php laravel laravel-5 laravel-8 laravel-7
2个回答
0
投票

您可以使用临时用户使用用户令牌创建 cookie,将购物车分配给他,如果他登录,则删除该用户并重新分配给实际用户


0
投票

我相信,如果您将该客户端与会话关联,即使这是访客 ID,您稍后也可以获取该访客会话 ID 并与记录的会话 ID 关联

举个例子:

// Generating a unique identifier for a guest user
$guestSessionId = session()->get('guestSessionId', function() {
   return session()->put('guestSessionId', uniqid('guest_', true));
});

// Adding item to cart for a guest user
\Cart::session($guestSessionId)->add([
    'id' => $productId,
    'name' => $productDetails['name'],
    'price' => $productDetails['price'],
    'quantity' => $productDetails['quantity'],
    'attributes' => [],
    'associatedModel' => $productDetails,
]);

然后您需要处理这些会话并将它们与帐户关联

public function loginUser(Request $request)
{
    // here your current auth login, or create one...

    $userId = auth()->id(); // or however you get the logged-in user's ID
    $guestSessionId = session('guestSessionId');

    // Check if there is a cart for the guest user
    if (\Cart::session($guestSessionId)->getContent()->isNotEmpty()) {
        // Merge guest cart into user cart
        $guestCartItems = \Cart::session($guestSessionId)->getContent();
        foreach ($guestCartItems as $item) {
            \Cart::session($userId)->add($item);
        }

        // Clear the guest cart
        \Cart::session($guestSessionId)->clear();

        // Remove the guestSessionId as it's no longer needed
    session()->forget('guestSessionId');
    }
    // everything else of the login logic...
}

我相信这可以在您的项目中发挥作用,如果有任何问题,请提出,我会根据您的实际代码调整响应。

干杯。

© www.soinside.com 2019 - 2024. All rights reserved.