【问题标题】:One-to-many self-relation in prisma schemaprisma 模式中的一对多自关系
【发布时间】: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,但是因为它声明了

这种关系表达如下:

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

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

【问题讨论】:

    标签: database prisma


    【解决方案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 } })
    

    【讨论】:

    • 谢谢!了解我需要多对多关系而不是一对多关系使其“点击”
    猜你喜欢
    • 2022-11-25
    • 2021-06-30
    • 2022-12-04
    • 2021-10-28
    • 2022-01-08
    • 2021-12-04
    • 2023-01-27
    • 2021-10-03
    • 2021-07-23
    相关资源
    最近更新 更多