GraphQL Prisma数据库,允许两个表与一个表建立关系

时间:2019-05-26 02:05:06

标签: database postgresql orm graphql prisma

我正在寻找将两个不同的表连接到一个表的关系表。

type User {
  booking: [Booking!]! @relation(name: "UserToBooking" onDelete: SET_NULL)
}

type Booking {
  owner: User! @relation(name: "UserToBooking", onDelete: SET_NULL)
  renter: [User!]! @relation(name: "UserToBooking", onDelete: SET_NULL)
}

Prisma只允许一个相同的关系,因此不可能有两个“ UserToBooking”。创建允许执行此操作的关系的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您必须有两种不同的预订类型。我猜这就像是AirBnB布置,用户可以拥有已出租的财产和/或也可以从他人那里出租财产。我认为您应该在用户类型中指定两个不同的项目来区分它们,然后为它们建立关系。像这样:

type User {
  booking: [Booking!]! @relation(name: "UserToBooking" onDelete: CASCADE)
  let: [Booking!]! @relation(name: "UserToLetBooking" onDelete: CASCADE)
}

type Booking {
  owner: User! @relation(name: "UserToLetBooking", onDelete: SET_NULL)
  renter: User! @relation(name: "UserToBooking", onDelete: SET_NULL)
}

通过这种方式,预订会显示出一个出租人的用户和一个出租人的用户。我还将预订中的承租人更改为单个用户,因为我认为每个预订都有1个出租所有者和1个承租人。我还更改了用户类型的onDelete设置,因此,如果删除用户,则其所有预订或租赁信息也会被删除。这将是典型的模式,但取决于您。