Laravel报错:Eloquent构建器实例不存在[title]属性,无foreach现有方案无效
解决Laravel中「Property [title] does not exist on the Eloquent builder instance」错误
这问题我太熟了!你现在的代码里,$artikels = Artikel::where('id', $id);这一行返回的是Eloquent查询构建器实例,不是单个的Artikel模型对象——构建器只是准备好查询语句,但还没真正去数据库里取数据,自然没法直接访问title这种模型属性。
其他用户用foreach能解决是因为foreach会自动触发查询(构建器实现了迭代器接口),但你是要取单条数据,所以得用下面的方法:
修正控制器代码
把构建器转换成实际的模型对象,常用两种方式:
- 使用
first()方法获取匹配的第一条记录:
public function showwereld($id) { $artikel = Artikel::where('id', $id)->first(); // 额外建议:如果要确保记录存在,可使用firstOrFail(),不存在时抛出404 // $artikel = Artikel::where('id', $id)->firstOrFail(); return view('pages.show')->with('artikel', $artikel); }
- 更简洁的方式:用
find()方法直接通过ID查找模型:
public function showwereld($id) { $artikel = Artikel::find($id); // 同样,确保存在的话用findOrFail() // $artikel = Artikel::findOrFail($id); return view('pages.show')->with('artikel', $artikel); }
修正视图代码
因为变量名改成了单数$artikel(更语义化,毕竟是单条数据),所以视图里也要对应修改:
<div class="row"> <div class="artikeltitel marginauto"> <div class="col-md-6 offset-md-3"> <h2>{{$artikel->title}}</h2> <p style="font-weight: bold;">{{$artikel->intro}}</p> <p>{{$artikel->body}}</p> </div> </div> </div>
补充说明
- 用
firstOrFail()/findOrFail()的好处是,如果ID对应的记录不存在,Laravel会自动返回404页面,避免视图里因为$artikel为null而出现新的报错。 - 变量名用单数
$artikel而不是复数$artikels,符合代码语义,也能避免自己混淆是单条还是多条数据。
内容的提问来源于stack exchange,提问作者Jorden vg
相关产品推荐
相关产品推荐

