我完全迷路了。我有一个明确的多对多关系:用户可以有多个列表,但列表可以由多个用户拥有:
model List {
id String @id @default(cuid())
title String
users UsersOnLists[]
}
model User {
id String @id @default(cuid())
name String
lists UsersOnLists[]
}
model UsersOnLists {
id String @id @default(cuid())
order Int
user DictItem? @relation(fields: [userId], references: [id])
userId String?
list List? @relation(fields: [ListId], references: [id])
listId String?
}
现在我想连接一个列表到一个用户:
prisma.list.update({
where: {
id: input.id
},
data: {
users: {
create: [{
order: 123,
user: {
connect: {
id: "abcd-123",
}
}
}],
}
}
});
这工作。
然而,我不知道如何在prism中断开多对多关系?假设我想再次断开用户与列表的连接?我该怎么做呢?
prisma.list.update({
where: {
id: input.id
},
data: {
users: {
disconnect: [{
user: {
disconnect: {
id: "abcd-123",
}
}
}],
}
}
});
这行不通。
我在prisma文档中也找不到太多关于断开连接的内容。什么好主意吗?
我想我可以从关系表中删除行,但这感觉不太干净,我想我仍然会在用户&名单表吗?如果这是推荐的方法,我更喜欢使用disconnect
。
你得到一个特定的错误吗?如果你使用带有TypeScript提示的代码编辑器/IDE,它应该会给你一个关于正在发生的事情的特定错误。如果不是这样,那么当您尝试运行操作时,命令行应该会给您错误。
文档:https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries disconnect-a-related-record
"disconnect"操作不能断开深嵌套关系。它只会断开直接连接到相关模型的文档。在您的情况下,您只能断开UserOnList
与List
的连接,但您也不能在相同的操作中断开User
与UserOnList
的连接。
prisma.list.update({
where: {
id: input.id
},
data: {
users: {
disconnect: [{
id: "ID_OF_UsersInList_MODEL_HERE"
}],
}
}
});
也-你不需要UsersInList
表。Prisma可以管理"join"。如果您不需要该模型的任何额外信息或数据,可以在引擎盖下为您提供。如果你想让Prisma自己管理这个表,请查看这里的文档:https://www.prisma.io/docs/concepts/components/prisma-schema/relations/many-to-many-relations