尝试在 Laravel 中使用 Gloudemans\Shoppingcart\ 获取非对象的 属性 'img'

Trying to get property 'img' of non-object using Gloudemans\Shoppingcart\ in Laravel

我正在创建一个 Laravel 电子商务网站,我正在使用 Gloudemans\Shoppingcart\ 库。 'Add To Cart' 按钮有问题。我再解释一下!我有一个 singleProduct.blade.php 文件,它从控制器调用产品信息:

这是将数据从数据库传递到视图的函数:

public function show($name)
{
    $iamlush = iamlush::where('name', $name)->firstOrFail();

    return view('singleProduct')->with('product', $iamlush);
}

这是单一产品文件:

<div class="contentContainer">
    <div class="rowContainer text-center">
        <div class="productImgContainer">
            <img src="{{ asset('img/iamlush/shop/'.$product->img) }}" class="productImg">
        </div>

        <div class="productInfoContainer">
            <div class="text-center">
                <div class="productLogoContainer">
                    <img src="{{ asset('img/logo/'.$product->productLogo) }}" class="logoContainer">
                </div>

                <h3>{{ $product->name }}</h3>
                <h5>{{ $product->priceFormat() }}</h5>
             </div>

             <p class="descriptionContainer">
                 {{ $product->description }}
             </p>

             <div class="rowContainer">
                 <div class="iconContainer">
                     <img src="{{ asset('img/productPage/productInfo.png') }}" class="icons">
                 </div>

             <div class="iconContainer">
                 <img src="{{ asset('img/productPage/paymentMethods.jpg') }}" class="icons">
             </div>
         </div>

         <form action="{{ route('cart.store') }}" method="POST" class="formContainer">
             @csrf
             <input type="hidden" name="id" value="{{ $product->id }}">
             <input type="hidden" name="name" value="{{ $product->name }}">
             <input type="hidden" name="price" value="{{ $product->price }}">

             <div class="BtnContainer">
                 <button type="submit" class="btnCart">Add To Cart</button>
             </div>
         </form>
        </div>
    </div>
</div>

'Add To Cart' 向 'cart.store' 发送 POST 请求,这是 web.php:

Route::post('/cart', 'CartController@store')->name('cart.store');

这是购物车控制器文件:

public function store(Request  $request)
{
    Cart::add($request->id, $request->name, 1, $request->price)->associate('App\iamlush');

    return redirect()->route('cart.index')->with('success_message', 'Item was added to your cart!');
}

购物车页面分为几个 Laravel 部分。首先是成功添加项目时传递成功消息:

@if (session()->has('success_message'))
    <p class="itemAddedContainer">
        {{ session()->get('success_message') }}
    </p>
@endif

第二个是实际的购物车功能,它检查购物车的计数是否大于 0,即购物车中是否有商品:

@if(\Gloudemans\Shoppingcart\Facades\Cart::count() > 0)
                <p class="introTxt">Looks like you have {{ \Gloudemans\Shoppingcart\Facades\Cart::count() }} Let's see what you have in your bag...</p>

                <div class="rowContainer">
                    <!-- holds labels for cart -->
                    <div class="labelContainer">
                        <p>Product Image</p>
                    </div>

                    <div class="labelContainer">
                        <p>Name</p>
                    </div>

                    <div class="labelContainer">
                        <p>Quantity</p>
                    </div>

                    <div class="labelContainer">
                        <p>Price</p>
                    </div>
                </div>

这一段之后,在'count() > 0'的@else和@endif之前,是购物车中的@foreach循环:

@foreach( \Gloudemans\Shoppingcart\Facades\Cart::content() as $item)
                    <div class="productRowContainer">
                        <!-- holds labels for cart -->
                        <div class="cartItemContainer">
                            <img src="{{ asset('img/iamlush/shop/'.$item->model->img) }}" style="width: 30%;">
                        </div>

                        <div class="cartItemContainer">
                            <div class="dataContainer">
                                <img src="{{ asset('img/logo/'.$item->model->productLogo) }}" class="productLogo">
                                <p>Mediterranean Dark</p>
                            </div>
                        </div>

                        <div class="cartItemContainer">
                            <div class="dataContainer">
                                <div class="quantityContainer">
                                    <button class="quantityBtn">-</button>
                                </div>

                                <div class="quantityContainer">
                                    <p>1</p>
                                </div>

                                <div class="quantityContainer">
                                    <button class="quantityBtn">+</button>
                                </div>
                            </div>
                        </div>

                        <div class="cartItemContainer">
                            <div class="dataContainer">
                                <p>{{ $item->model->presentprice() }}</p>
                            </div>
                        </div>
                    </div>
                @endforeach
            @else
                <h3>You dont have anything</h3>
            @endif

这部分将购物车的内容作为$item,然后用来填充数据。我正在关注这个 youtube 教程:

Laravel 电子商务 - 购物车 - 第 2 部分 ( https://www.youtube.com/watch?v=Jzi6aLKVw-A&list=PLEhEHUEU3x5oPTli631ZX9cxl6cU_sDaR&index=4&t=430s )

在 13:00 分钟,他让它变得动态,当我第一次尝试它时,它对我有用,但后来它突然停止工作,我不明白为什么,它给了我这个错误:

Trying to get property 'img' of non-object

首先,尝试调试您的查询结果

dd($iamlush)

如果没有,请检查您的数据库?你有那个名字的记录吗 可能有两个原因

  1. 您没有此条件的任何记录
  2. 你的模型有误