prisma 模式中的一对多自关系

Posted

技术标签:

【中文标题】prisma 模式中的一对多自关系【英文标题】:One-to-many self-relation in prisma schema 【发布时间】:2021-03-17 15:12:39 【问题描述】:

我想创建一个简单的表:

Users
---
id
name
friends

friends 字段应该是其他用户 ID 的数组。我正在尝试在schema.prisma 中为此定义一个架构:

model User 
  id      String  @id @default(uuid())
  name    String
  friends User[]

保存文件会自动完成架构到此:

model User 
  id      String  @id @default(uuid())
  name    String
  friends User[]  @relation("UserToUser")
  User    User?   @relation("UserToUser", fields: [userId], references: [id])
  userId  String?

我不确定如何解释。我已经阅读了Prisma docs about one-to-many self relations,但是因为它声明了

这种关系表达如下:

“一个用户有零个或一个老师” “一个用户可以有零个或多个学生”

我怀疑这是我想要的。如果没有“一个用户有零个或一个老师”部分,如何获得“一个用户可以有零个或多个学生”?

【问题讨论】:

【参考方案1】:

这里你需要一个User 有一个或多个朋友的关系。这将导致多对多的自我关系,因为User 可以有很多朋友,而且User 可以是其他Users 的朋友。

这可以按如下方式完成:

model User 
  id              String @id @default(uuid())
  name            String
  friends         User[] @relation("friends")
  friendsRelation User[] @relation("friends")

friendsRelation 是一个额外的字段,可以忽略,因为它只用于存储多对多关系。

与朋友创建User 如下所示:

  await prisma.user.create(
    data: 
      name: 'user 1',
      friends:  create: [ name: 'user 2' ,  name: 'user 3' ] ,
    ,
  )

查询所有用户及其朋友将是:

await prisma.user.findMany( include:  friends: true  )

【讨论】:

谢谢!了解我需要多对多关系而不是一对多关系使其“点击”

以上是关于prisma 模式中的一对多自关系的主要内容,如果未能解决你的问题,请参考以下文章

如何利用 Prisma 的隐式关系来创建以下关系? (一对多,多对多,一对一)

Prisma 插入关系一对多

Prisma 可以从关系表中创建一对多关系吗?

Prisma 上与 Self 的一对多关系

与附加字段的一对多关系

代码第一个一对多自引用 WillCascadeOnDelete 错误