在Prisma + MySQL中断开多对多关系



我完全迷路了。我有一个明确的多对多关系:用户可以有多个列表,但列表可以由多个用户拥有:

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"操作不能断开深嵌套关系。它只会断开直接连接到相关模型的文档。在您的情况下,您只能断开UserOnListList的连接,但您也不能在相同的操作中断开UserUserOnList的连接。

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

最新更新