首页 > 解决方案 > 在 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] 上的未定义关系 [部门]。”

如何访问不直接链接到用户而是链接到员工的部门和年级关系?

谢谢

标签: laravelapi

解决方案


正确的语法是:

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


推荐阅读