如何利用 Prisma 的隐式关系来创建以下关系? (一对多,多对多,一对一)
Posted
技术标签:
【中文标题】如何利用 Prisma 的隐式关系来创建以下关系? (一对多,多对多,一对一)【英文标题】:How can I leverage Prisma's implicit relations to create the following relation? (one-many, many-many, one-one) 【发布时间】:2022-01-08 23:42:57 【问题描述】:我正在学习 Prisma,
我想尽可能地利用 Prisma 的隐式关系来处理以下关系(后来我想使用 nexus 来编写查询):
1 个用户可以属于许多对话(因为它是参与者)
1 Conversation 有一个数组 os 用户(称为参与者)
1 个用户可以拥有许多消息(作为作者)
1 条消息可以有 1 个用户(作为作者)
1 对话有一组消息(称为文本)
1 条消息只能属于 1 个对话
到目前为止,我已经想出了这个(但我非常怀疑它是否正确,因为在与 nexus 一起使用时它的行为不像我想要的那样):
model User
id String @id @default(uuid())
conversations Conversation[]
model Message
id String @id @default(uuid())
authorId String
conversationId String
author User @relation(fields: [authorId], references: [id])
conversation Conversation @relation(fields: [conversationId], references: [id])
model Conversation
id String @id @default(uuid())
participants User[]
messages Message[]
我能否获得一些指示/帮助以继续?
【问题讨论】:
【参考方案1】:按照您的要求列表,此架构已准备就绪。只需在 User 模型上添加 messages 字段来声明它的关系。
应该是这样的:
model User
id String @id @default(uuid())
conversations Conversation[]
messages Message[]
model Message
id String @id @default(uuid())
authorId String
conversationId String
author User @relation(fields: [authorId], references: [id])
conversation Conversation @relation(fields: [conversationId], references: [id])
model Conversation
id String @id @default(uuid())
participants User[]
messages Message[]
您在使用 Nexus 时遇到任何具体问题吗?
我有一个视频教程,可以帮助您获得一些额外的指导: https://www.youtube.com/watch?v=sWlzqRB5Xro
【讨论】:
【参考方案2】:我相信这个架构会为您解决这个问题。如果你想了解更多,我不久前给了talk about this topic。
model User
id String @id @default(uuid())
messages Message[]
conversations Conversation[]
model Message
id String @id @default(uuid())
author User @relation(fields: [authorId], references: [id])
authorId String
conversation Conversation @relation(fields: [conversationId], references: [id])
conversationId String
model Conversation
id String @id @default(uuid())
messages Message[]
members User[]
【讨论】:
以上是关于如何利用 Prisma 的隐式关系来创建以下关系? (一对多,多对多,一对一)的主要内容,如果未能解决你的问题,请参考以下文章
论文解读基于TransS驱动的隐式篇章关系识别的联合学习框架