Laravel 8用户API报错:User模型不存在department关联,如何访问Employee模型下的department与gradelevel关联?
解决Laravel嵌套关联加载的问题
你遇到的这个错误原因很清晰:department和gradelevel并不是直接定义在User模型上的关联关系,它们属于Employee模型,所以直接在User::with()里写这两个关联名,Laravel自然找不到对应的关系。
要访问这种嵌套在关联模型里的关联数据,Laravel提供了点语法来实现嵌套预加载,只需要把关联的层级用.连接起来即可。
修改你的控制器代码
把原来的预加载代码改成这样:
return response()->json(User::with('employee.department', 'employee.gradelevel', 'company')->get(), 200);
这里的employee.department意思是:先加载User的employee关联,再从加载出来的Employee模型里加载它的department关联;employee.gradelevel的逻辑也是一样的。
另一种更灵活的写法(数组形式)
如果之后你需要给嵌套的关联加额外的查询条件(比如只加载状态正常的部门),可以用数组闭包的写法,可读性更强:
return response()->json(User::with([ 'company', 'employee' => function ($query) { $query->with(['department', 'gradelevel']); // 这里可以添加额外查询条件,比如$query->where('status', 1); } ])->get(), 200);
这样修改后,你的接口就能正确加载User关联的Company、Employee,以及Employee关联的Department和GradeLevel数据了。
内容的提问来源于stack exchange,提问作者user11352561
相关产品推荐
相关产品推荐

