Prisma 模式中的一对多自关系

One-to-many self-relation in prisma schema

我想创建一个简单的table:

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,但由于它指出

This relation expresses the following:

  • "a user has zero or one teachers"
  • "a user can have zero or more students"

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

这里你需要一个 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 } })