在 Prisma 中断开多对多关系

问题描述 投票:0回答:2

所以,我昨天问了这个问题,这里的一位用户非常友好地在 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 },
});
many-to-many prisma prisma2
2个回答
2
投票

有了明确的多对多关系,您只需从表示关系的表中删除(即您的情况下的

UsersGroups
):

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

如果要从组中删除多个用户:

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

0
投票

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

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

从这里获取:https://github.com/prisma/prisma/issues/5946

© www.soinside.com 2019 - 2024. All rights reserved.