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

Laravel Eloquent关联报错Undefined property: stdClass::$category求助

解决Laravel中Undefined property: stdClass::$category的问题

嘿,我来帮你排查这个错误!你遇到的Undefined property: stdClass::$category问题,根源其实出在控制器的查询方式上,咱们一步步来解决:

问题原因

你在控制器里用了DB::table('formations')->paginate('4')来获取培训数据,这个方法返回的是stdClass对象的集合,而不是你定义的Formation模型实例。Eloquent的关联关系(比如你在模型里写的category()方法)只有在模型实例上才能生效,普通的数据库对象没有这个动态属性,所以视图里调用$formation->category->name就会报错。

解决方案(推荐第一种,更符合Laravel最佳实践)

方案1:使用Eloquent模型查询并预加载关联

把控制器里的查询代码改成用Formation模型来查询,同时预加载category关联(避免N+1查询问题,提升性能):

// 控制器代码修改为:
$formations = Formation::with('category')->paginate(4);
$categories = Category::all();
return view('formation.index',compact('categories','formations'));

这样返回的就是Formation模型实例集合,视图里原来的{{$formation->category->name}}就能正常工作了。

方案2:如果坚持用DB门面查询,手动关联表

如果你一定要用DB::table()的方式查询,需要手动join分类表并选择需要的字段:

$formations = DB::table('formations')
    ->join('categories', 'formations.category_id', '=', 'categories.id')
    ->select('formations.*', 'categories.name as category_name')
    ->paginate(4);

然后在视图里改成调用手动命名的字段:

<td>{{$formation->category_name}}</td>

额外提醒

  • 确保你的formations表确实存在category_id字段,并且和categories表的id字段正确关联
  • 第一种方案是Laravel推荐的Eloquent用法,能充分利用模型的关联、事件等特性,更便于维护

内容的提问来源于stack exchange,提问作者Mohamed Midou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:57