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

Posted

技术标签:

【中文标题】GraphQL Prisma 数据库,允许两个表与一个表有关系【英文标题】:GraphQL Prisma database that allows two tables to have relations to one table 【发布时间】:2019-10-12 02:05:59 【问题描述】:

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

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】:

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

【讨论】:

您提供了一个有效的解决方案。我会尝试实现这一点。 Renter 是一个数组,因为随着时间的推移会有多人租用同一个房产。

以上是关于GraphQL Prisma 数据库,允许两个表与一个表有关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在两个字段 prisma-graphql 中使用相同的生成 ID

GraphQL Prisma - 定义链接到两个用户的“投票”类型

如何使用 prisma (graphql) 集群

GraphQL(Prisma)突变数据未定义

为啥在使用 Prisma 时需要使用 GraphQL 关系?

Prisma v2:生成一个 .graphql 文件来编辑?