【问题标题】:Same type relationships in GraphQL / PrismaGraphQL / 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 添加到同一用户的报告,而不是其他用户的报告。

【问题讨论】:

    标签: graphql prisma prisma-graphql


    【解决方案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的扩展,它们之间的工作关系是在这两种类型之间定义的。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2019-08-05
      • 2019-09-03
      • 2020-01-31
      • 2020-07-02
      • 2021-10-14
      • 1970-01-01
      • 2019-02-14
      • 2020-03-07
      相关资源
      最近更新 更多