2

我正在学习棱镜,

我想尽可能地利用 Prisma 的隐式关系来处理以下关系(后来我想使用 nexus 来编写查询):

在此处输入图像描述

  • 1 个用户可以属于许多对话(因为它是参与者)

  • 1 对话有一个数组操作系统用户(称为参与者)

  • 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[]
}

我可以请一些指示/帮助继续吗?

4

2 回答 2

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

于 2021-12-09T18:14:48.740 回答
1

我相信这个架构会为您解决。如果您想了解更多信息,我不久前曾讨论过这个话题

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[]
}
于 2021-12-09T18:52:03.953 回答