所以,我昨天问了这个问题,这里的一位用户在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