Laravel Lighthouse检索枢轴数据

问题描述

我正在使用Laravel Lighthouse v4.16来为我的项目编写API。大多数变异和查询都可以正常工作。但是,当我尝试查询数据透视表时,结果表明所有数据透视表均为空。

所以我们有3种不同的模型,我只会显示引起问题的关系

用户

public function companies(): BelongsToMany {
    return $this->belongsToMany(Company::class)
        ->using(CompanyUser::class)
        ->withPivot(
            'personnel_number',);
}

公司

public function users(): BelongsToMany {
   return $this->belongsToMany(User::class)->withPivot(
      'personnel_number',)->using(CompanyUser::class);
}

CompanyUser-扩展枢轴

public function user(): BelongsTo {
    return $this->belongsTo('App\Models\Tenant\User','user_id');
}

public function company(): BelongsTo {
    return $this->belongsTo('App\Models\Tenant\Company','company_id');
}

这些在Graphql中表示为以下类型

type User {
    id: ID!
    title: String
    companies: [Company!] @belongsToMany
    pivot: CompanyUser
}

type Company {
    id: ID!
    name: String
    users: [User] @belongsToMany
}

type CompanyUser {
    id: ID!
    personnel_number: String
    user: User! @belongsTo
    company: Company! @belongsTo
}

但是当我运行以下查询时,关系已成功检索,但数据透视表仍然为空。

{
 user(id: 1) {
    id
    first_name
    companies {
      id
      name
    }
    pivot {
      personnel_number
    }
  }
}

查询的结果如下所示

{
  "data": {
    "user": {
      "id": "1","first_name": "Mike","companies": [
        {
          "id": "1","name": "company_name_1"
        }
      ],"pivot": null
     }
   }
}

解决方法

问题是查询中pivot的位置,pivot应该在一个关系中(即:在创建表的联接以加载该关系后将被加载)。

因此,要实现这一点,您需要进行以下更改:

  • 在以下类型中:
type Company {
    id: ID!
    name: String

    users: [User] @belongsToMany
    pivot: CompanyUser # add
}
  • 在查询中:
{
  user(id: 1) {
    id
    first_name
    companies {
      id
      name
      pivot { # moved here,inside companies relations
        personnel_number
      }
    }
  }
}

重新标记:您可以在没有CompanyUser类的情况下操作数据透视表。