当前位置: 首页 > 知识库问答 >
问题:

向Laravel中的会话购物车添加和更新产品

呼延运恒
2023-03-14

我正在为在拉雷维尔开会的客人建造一辆购物车。我可以向会话变量“cart”添加一个带有数量的产品但是,当我再次添加相同的产品时,我无法增加数量,因为我无法在数组中搜索相同的产品ID。

控制器

public function addToSessionCart(Request $request, $id)
{
    if (session()->has('cart')) {
        $oldCart = session()->get('cart');
        $cartdata = $oldCart;
        if (array_key_exists('product_id', $cartdata)) {
            if (in_array($id, $cartdata['product_id'], true)) {
                $cartdata['quantity'] += 1;
            } else {
                $cartdata['product_id'] = $id;
                $cartdata['quantity'] = 1;
            }
        }
    } else {
        $cartdata = [];
        $cartdata['product_id'] = $id;
        $cartdata['quantity'] = 1;
    }
    session()->put('cart', $cartdata);
    session()->flash('message', 'Item added to cart !');

    return back();
}

我正在将数据从我的AppServiceProvider传递到购物车:

view()->composer('*', function ($view) {
    if (Auth::check()) {
        $cart_items = Cart::where('user_id', Auth::user()->id)->with('product')->get();
        $cart_items_count = Cart::where('user_id', Auth::user()->id)->count();
        $menus = Menu::where('status', '1')->orderBy('order', 'ASC')->get();
        $view->with(['cart_items' => $cart_items, 'cart_items_count' => $cart_items_count, 'menus' => $menus]);
    } else {
        $cart_items = null;
        $session_cart_items = null;
        if (\Session::get('cart')) {
            $session_cart_items = [];
            foreach (session('cart') as $session_cart_items[]) {
                $session_cart_items['product'] = Product::where('id', session('cart.product_id'))->get();
                $session_cart_items['quantity'] = session('cart.quantity');
            }
        }

        $cart_items_count = count(\Session::get('cart'));
        $menus = Menu::where('status', '1')->orderBy('order', 'ASC')->get();
        $view->with([
            'cart_items' => $cart_items, 'cart_items_count' => $cart_items_count, 'menus' => $menus,
            'session_cart_items' => $session_cart_items,
        ]);
    }
}); 

查看

@foreach($session_cart_items['product'] as $key => $name)
    <div class="product-cart">
        <div class="product-image">
            <img src="/frontend/assets/images/{{ $name->image }}" alt="image">
        </div>
        <div class="product-content">
            <h3><a href="/product/{{$name->id}}/{{$name->slug}}">{{$name->name}}</a></h3>
            <div class="product-price">
                <span>{{ $session_cart_items['quantity'] }}</span>
                <span>x</span>
                &#8377; <span class="price">{{ $name->price }}</span>
            </div>
        </div>
    </div>
    @php
        $total += ($name->price * $session_cart_items['quantity']);
    @endphp
@endforeach

当相同的产品被添加到购物车时,我希望数量增加。如果没有,则向会话数组添加新产品id和数量

共有1个答案

董喜
2023-03-14

这一行需要更改:

foreach (session('cart') as $session_cart_items[]) {

您不能使用[]进行阅读。

foreach (session('cart') as $session_cart_items) {
 类似资料:
  • 如果购物车中的数量已经是1,我试图仅用数量更新购物车,但它就是不起作用。我的购物车数组不会更新。 这是我的viewHolder类,其中array menuItemArrayList由产品组成,array selectionItemArrayList是购物车。int totalAmount是购物车中产品的美元总和,它的计算结果很好。 在for each block中,我遍历cart数组,查看是否已经

  • 我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。 在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。 当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方

  • 目标:在一个按钮点击中添加多个可变产品到购物车。 我试着将这段代码放入循环中,但它不起作用。 但是这种方法不能解决问题,因为我需要在一个按钮点击中添加几个产品变体。 所有的建议都将不胜感激。多谢了。

  • 问题内容: 我已经组装好了将链接添加到购物车中的可变产品的链接,就像这样,但是我对如何“刷新”购物车而不重新加载页面感到困惑。我的猜测是,我没有正确地向购物车请求中添加此AJAX,因此未调用woocommerce_add_to_cart_fragments(我相信我的购物车HTML会在此处放置刷新)。 如果有人能指出我正确的方向,我将不胜感激。Variable / AJAX / WooCommer

  • 我已经组装了一个链接,像这样将一个可变产品添加到我的购物车,但是我不知道如何在不重新加载页面的情况下“刷新”购物车。我的猜测是,我没有正确地将此AJAX添加到购物车请求,因此,woocommerce_add_to_cart_fragments(我相信我的购物车超文本标记语言将被放置以供刷新)没有被调用。 如果有人能给我指出正确的方向,我将不胜感激。Variable/AJAX/WooCommerce

  • 我正在创建一个WooCommerce(5.6.0版)网站,用户可以在该网站上购买泡沫产品,并在存档页面上计算价格。基本上,用户输入维度,然后根据公式计算价格。我目前正在努力更新购物车中的价格,我以前没有在这一级别定制产品和价格的经验,因此任何帮助都将不胜感激。。到目前为止,我已经完成了以下步骤: 1.获取(通过Ajax)并在WC_会话中设置自定义产品价格 2.从WC_Session数据更改购物车项