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

Laravel8报错Property [Eng2] does not exist on this collection instance问题咨询

问题原因
  • 控制器detail方法中使用get()执行查询,该方法返回的是Eloquent集合对象(相当于包含多个匹配结果的模型数组),而非单个Wine模型实例。
  • 直接输出{{$wine}}时Laravel会自动将集合序列化为JSON字符串,因此能看到完整数据,但集合本身不存在Eng2属性,直接调用属性或数组下标读取字段就会报错。
  • 列表页运行正常是因为列表场景下会对集合做循环遍历,每次读取的是集合内的单个模型实例,因此可以正常读取字段。
解决方法

修改控制器的查询逻辑,将get()替换为first()或firstOrFail(),直接获取单条匹配记录:

public function detail($id) {
    // first()返回匹配条件的第一条单条模型实例
    $wine = Wine::where('ART','=',$id)->first(); 
    // 更推荐使用firstOrFail(),未匹配到数据时自动抛出404异常,避免后续逻辑异常
    // $wine = Wine::where('ART','=',$id)->firstOrFail();

    return view('detail', [
        'wine' => $wine
    ]);
}

修改完成后,模板中原有的{{$wine->Eng2}}写法即可正常读取对应字段值。

临时兼容方案(不推荐):如果不修改控制器,也可以在模板中读取集合的第一个元素取值:{{$wine[0]->Eng2}},但不符合详情页单条查询的逻辑规范,不建议使用。

内容的提问来源于stack exchange,提问作者Jean-Yves Romagnani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:09:03