首页 > 解决方案 > 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”。创建允许这样做的关系的最佳方法是什么?

标签: databasepostgresqlormgraphqlprisma

解决方案


您必须有两种不同的预订类型。我猜这有点像 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 设置,这样如果用户被删除,他的任何预订或让也会被删除。这将是一个典型的模式,但取决于您。


推荐阅读