断开棱镜中的多对多关系



所以,我昨天问了这个问题,这里的一位用户在Prisma中使用显式多对多关系时很友善,为我指明了正确的方向。

根据这个公认的答案,我能够使用Connect API更新关系。


prisma.group.update({
where: {
id: groupId,
},
data: {
users: { create: { user: { connect: { id: userId } } } },
},
include: { users: true },
});

在循环中连接关系时,实现中有一个小问题,但我纠正了这个问题,并进行了编辑,用正确的代码更新了接受的答案,如下所示:


prisma.group.update({
where: {
id: groupId,
},
data: {
users: {
create: users.map((user) => ({
user: { connect: { id: user.id } },
})),
},
},
include: { users: true },
});

我现在似乎想不明白的是,我如何做相反的事情,并以类似的方式"断开"这种关系。如果能在这方面得到帮助,我将不胜感激。

我尝试了一些我认为可能有效的方法:

prisma.group.update({
where: {
id: groupId,
},
data: {
users: {
delete: users.map((user) => ({
user: { disconnect: { id: user.id } },
})),
},
},
include: { users: true },
});

使用显式多对多关系,您只需从表示关系的表中删除即可(在您的情况下为UsersGroups(:

prisma.usersGroups.delete({
where: { userId_groupId: { groupId: groupId, userId: userId } },
});

如果您想从一个组中删除多个用户:

prisma.usersGroups.deleteMany({
where: { groupId: groupId, userId: { in: users.map((user) => user.id) } },
});

这篇文章是隐式和显式断开多对多连接的热门搜索结果。如果您想完全断开隐式多对多:

const data = await prisma.group.update({
where: {
id: groupId,
},
data: {
users: {
set: [],
},
},
});

从这里开始:https://github.com/prisma/prisma/issues/5946

最新更新