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 } })
我想创建一个简单的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 } })