You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade模板同一页面二次遍历产品集合报非对象属性读取错误

报错原因

  • 核心问题是foreach循环变量重名导致原始集合被覆盖:控制器传递到视图的$product是全部产品的集合,你第一个循环写的是@foreach($product as $product),遍历过程中会不断把当前的单个产品实例赋值给和集合同名的$product变量。第一次循环结束后,$product已经不再是原本的产品集合,而是最后一条产品的单条实例(如果产品集合为空则为null)。
  • 第二次循环尝试遍历已经被覆盖为单条实例/ null的$product变量,无法正常遍历,访问属性时就会抛出「Trying to get property 'name' of non-object」报错。

修复方案

1. 调整控制器代码,遵循集合用复数的命名规范,避免重名

public function index(){
    // 产品集合变量改为复数$products
    $products = product::get();
    return view ('pages.verkoop', [
        'products' => $products
    ]);
}

2. 修改Blade视图中两处foreach的遍历逻辑,遍历集合变量$products,单条实例用$product

第一处产品展示循环修改为:

<div class="nieuws2">
    @foreach($products 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 ($products 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>

内容的提问来源于stack exchange,提问作者ruben Maesfranckx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:48:04