所以,我昨天问了这个问题,这里的一位用户非常友好地在 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: [],
},
},
});