GraphQL / Prisma 中的相同类型关系
Posted
技术标签:
【中文标题】GraphQL / Prisma 中的相同类型关系【英文标题】:Same type relationships in GraphQL / Prisma 【发布时间】:2019-12-19 04:30:59 【问题描述】:我正在尝试创建相同类型的一对多关系。在这种情况下,一个用户可以向一个用户报告,然后有许多用户向他们报告。
我的数据模型目前如下所示:
type User
id: ID! @id
name: String!
email: String! @unique
reportsTo: User @relation(name: "UserReports")
reports: [User] @relation(name: "UserReports")
我希望将 userId 添加到 reportsTo 应该将相应的用户 ID 添加到报告中。
但是,将 userId 添加到 reportsTo 是将 userId 添加到同一用户的报告,而不是其他用户的报告。
【问题讨论】:
【参考方案1】:您不能与一种类型的不同元素建立关系。关系连接两种不同的类型,因此我们知道它们共享信息。因此,我们需要创建一些可以建立关系的附加类型。
我创建了两种不同的类型,一种是“监督者”,它是监督其他用户的用户,但我们将这些用户作为第二种类型,“监督者”。每个用户既可以是主管,也可以是被监督者。用户与这两种类型中的每一种之间存在关系,并且这两种类型之间也存在关系。
这是数据模型:
type User
id: ID! @id
name: String!
email: String! @unique
supervisor: Supervisor @relation(name: "UserToSupervisor")
supervisee: Supervisee @relation(name: "UserToSupervisee")
type Supervisor
id: ID! @id
user: User! @relation(name: "UserToSupervisor")
supervisees: [Supervisee!]! @relation(name: "SupervisorToSupervisee")
type Supervisee
id: ID! @id
user: User! @relation(name: "UserToSupervisee")
supervisor: Supervisor! @relation(name: "SupervisorToSupervisee")
您必须查看用户中的“主管”字段,而不是查看该用户的主管是谁,而是该用户自己可能是主管。这也是被监督者的情况。基本上supervisor和supervise都是user的扩展,它们之间的工作关系是在这两种类型之间定义的。
【讨论】:
以上是关于GraphQL / Prisma 中的相同类型关系的主要内容,如果未能解决你的问题,请参考以下文章
Prisma、GraphQL 和 Apollo 中具有突变的数据关系和连接类型
如何在两个字段 prisma-graphql 中使用相同的生成 ID
从 prisma 生成的客户端访问 graphql 服务器中的数据类型