我试图在我的 blade.php 文件中显示数据库中的数据,但出现此错误 "Trying to get property 'name' of non-object"

I'm trying to show data from database in my blade.php file but I get this error "Trying to get property 'name' of non-object"

<div class="nieuws2">
        @foreach($product as $product)
            <div class="nieuwsber bericht{{$product->id}}">
                <h2>{{$product->name}}</h2>
                <img src="{{$product->image}}">
                <span>€{{$product->price}}</span>
            </div>
        @endforeach
    </div>
    <form class="saleform" method="post" action="sale">
        <h2>Plaats je bestelling</h2>
        @csrf
        <label for="name">Naam (voornaam + achternaam)</label><br>
        <input type="text" id="name" name="name"><br><br>
        <label for="adres">adres (straat + nr + postcode + gemeente)</label><br>
        <input type="text" id="adres" name="adres"><br><br>
        @foreach ($product as $product)
            <label for="{{$product->name}}">{{$product->name}}</label><br>
            <input type="number" id="{{$product->name}}" name="{{$product->name}}" value="0"><br><br>
            <input type="hidden" id="price" name="price" value="{{$product->price}}">
        @endforeach
        <input type="submit">
    </form>

第一个@foreach 工作正常,它做了它需要的。但后来我尝试在同一个 blade 文件中再次执行此操作,但由于某种原因它不起作用。它应该做的是遍历每个产品并将其作为一个数字输入,这样客户就可以在他的订单中添加 x-amount。

我的控制器看起来像这样:

public function index(){
        $product = product::get();
        return view ('pages.verkoop', [
            'product' => $product
        ]);

好的,显然你不能在一个 blade 文件中 foreach 循环同一个对象两次。我通过将控制器更改为此

来修复它
public function index(){
        $product = product::get();
        $product2 = product::get();
        return view ('pages.verkoop', [
            'product' => $product,
            'product2' => $product2,
        ]);
    }

并将 blade.php 更改为:

<div class="nieuws2">
        @foreach($product as $product)
            <div class="nieuwsber bericht{{$product->id}}">
                <h2>{{$product->name}}</h2>
                <img src="{{$product->image}}">
                <span>€{{$product->price}}</span>
            </div>
        @endforeach
    </div>
    <form class="saleform" method="post" action="sale">
        <h2>Plaats je bestelling</h2>
        @csrf
        <label for="name">Naam (voornaam + achternaam)</label><br>
        <input type="text" id="name" name="name"><br><br>
        <label for="adres">adres (straat + nr + postcode + gemeente)</label><br>
        <input type="text" id="adres" name="adres"><br><br>
        @foreach ($product2 as $product2)
            <label for="{{$product2->name}}">{{$product2->name}}</label><br>
            <input type="number" id="{{$product2->name}}" name="{{$product2->name}}" value="0"><br><br>
            <input type="hidden" id="price" name="price" value="{{$product2->price}}">
        @endforeach
        <input type="submit">
    </form>

所以这很奇怪 laravel。有人知道这是为什么吗?

您通过将循环名称设为变量 $product (foreach ($product as $product)) 来覆盖 $product 的值。您应该为正在迭代的内容使用不同的变量名称,并为您尝试执行的操作使用循环的当前值:

foreach ($products as $product)

将集合重命名为 $products 将是一个简单的修复。现在您不会通过让循环设置 $product 变量来覆盖 $products