laravel - 在 Laravel API 中调用模型 [App\\Models\\User] 上的未定义关系 [部门]
问题描述
在我的 Laravel-8 应用程序中,我正在构建用户 API:
在用户模型中,我有这样的关系:
public function company()
{
return $this->belongsTo('App\Models\Organization\OrgCompany');
}
public function employee(){
return $this->hasOne(HrEmployee::class, 'user_id');
}
在员工关系中,我有:
public function gradelevel()
{
return $this->belongsTo('App\Models\Hr\HrGradeLevel','grade_level_id','id');
}
public function department()
{
return $this->belongsTo('App\Models\Hr\HrDepartment','department_id','id');
}
然后我的控制器看起来像这样:
public function userAll()
{
try{
if(!Auth::user()->hasPermissionTo('user_access'))
{
return response()->json([ "message" => 'You are not authorised to view Users'], 401);
}
return response()->json(User::with('employee','company','department','gradelevel')->get(), 200);
} catch (\Exception $e) {
Log::error($e);
$message = $e->getMessage();
return response()->json(['error' => 1, 'message' => $message]);
}
}
当我尝试在 POSTMAN 中对其进行测试时,我收到了这个错误:
“消息”:“调用模型 [App\Models\User] 上的未定义关系 [部门]。”
如何访问不直接链接到用户而是链接到员工的部门和年级关系?
谢谢
解决方案
正确的语法是:
User::with(['company', 'employee.department', 'employee.gradelevel'])->get();
嵌套关系加载使用.
符号(relationship、other.nested 等)。如果您加载嵌套关系,它也会加载父关系,因此您不必这样做['company', 'employee', 'employee.department', 'employee.gradelevel']
有关完整详细信息,请参阅https://laravel.com/docs/8.x/eloquent-relationships#nested-eager-loading。
推荐阅读
- python - 在 python 代码中找不到“名称未定义”的原因
- c - 为什么我在运行我的 c 程序后总是得到 0?请帮帮我
- python - 使用图像、Flask、Gcloud Storage、Openpyxl 流式传输 Excel 文件时出现问题,无法保存所有图像的文件
- ssh - 在“ddev auth ssh”上找不到目录
- php - 如何使用“href”清除 $_GET 变量?
- c# - AlphaBeta Pruning TicTacToe 不阻塞,是 eval 问题吗?
- arrays - Excel 动态数组运行重复次数
- node.js - Sequelize:强制更新 JSON 数组
- go - 无法使用 net.Conn.Read 从 UNIX 套接字读取
- python - 有没有更快的方法来根据重复值的数量过滤 Pandas 数据框?