首页 > 解决方案 > 在 Prisma 中实现 3 向关系

问题描述

我也在Prisma 论坛上问过这个问题。

** 编辑 **:论坛在我提出问题后仅 1 天就被锁定为只读。这肯定会变得可怕,因为没有官方宣布他们是否会在实现承诺的功能后停止开发 Prisma 1。他们当然可以说些什么。TBH,不稳定的 Prisma 网站确实增加了我对 Prisma 的信心,尽管他们的回购中有很多明星。


我是 Prisma 的新手。所以我之间有一个三向关系User,我想定义。对于 a和 an 的每个关联,存在该关联的 a。如果我要为另一个 ORM 设计一个数据库表,我会创建一个表,其中,和列将它们关联起来。EventRoleUserEventRoleevent_useruser_idevent_idrole_id

实际上,这 3 列中的一行必须是唯一的。显然,如果 Prisma 能够保护这些约束,那就太好了,但我看到的明显解决方案可能甚至不会出现在 Prisma 1 上。

我目前的设计包括以下内容:

type User {
  // ...
  eventUsers: [EventUser!]!
}

type Event {
  // ...
  eventUsers: [EventUser!]!
}

type EventUser {
  role: Role!
  event: Event!
  user: User!
}

这样的设计会使render allxxWhereUniquexx无法使用,这绝对是维护关系的麻烦。upserts 肯定无法用于维持关系。

如何在 Prisma 中建立这样的关系?


User在某些情况下,每个用户也会有一个全局角色列表,因此和之间已经存在关联Role。问题涉及每个事件的“本地角色”。

标签: prisma

解决方案


如果每个用户已经有各自角色的值,则不需要第三个表(除非您希望将更多信息存储在模态层中,在这种情况下,角色类型应该在角色表中)。

@relation使用指令设置关系。您可以将其应用于关系中的两个表之一,但为了清楚起见,我将它们应用于事件表。该示例假设用户可以是多个事件的一部分。

表:

enum ROLE_TYPE {
 TYPE_ONE 
 TYPE_TWO
}

User {
 user_id: ID! @id
 events: [Event!]!

}

Event {
 event_id: ID! @id
 users: [User!]! @relation(link: INLINE)
}

Role {
 role_id: ID! @id
 type: ROLE_TYPE
 event: Event! @relation(link: INLINE)
 user: User! @relation(link: INLINE)
}

您可以在 Prisma网站上阅读有关关系的更多信息


推荐阅读