要在一个事务中删除一个 discussion,你可以使用 prisma 的事务功能。以下是一个使用 prisma 4.16 删除 discussion 的示例代码:

const { PrismaClient } = require("@prisma/client");

const prisma = new PrismaClient();

async function deleteDiscussion(discussionId) {
  await prisma.$transaction(async (prisma) => {
    // 删除 likes
    await prisma.likes.deleteMany({
      where: {
        postId: {
          in: {
            discussionId: discussionId,
          },
        },
      },
    });

    // 删除 posts
    await prisma.posts.deleteMany({
      where: {
        discussionId: discussionId,
      },
    });

    // 删除 discussion
    await prisma.discussion.delete({
      where: {
        id: discussionId,
      },
    });
  });
}

deleteDiscussion("discussionId").catch((error) => {
  console.error(error);
}).finally(async () => {
  await prisma.$disconnect();
});

上述代码首先创建了一个 PrismaClient 实例,并定义了一个名为 deleteDiscussion 的异步函数,该函数接受 discussionId 作为参数。在函数中,我们使用 prisma.$transaction 方法来创建一个事务。

在事务中,我们首先删除了所有与 discussion 相关的 likes,通过调用 prisma.likes.deleteMany 方法,使用了一个嵌套的查询来选择与指定的 discussionId 相关的所有 likes。

接下来,我们删除了所有与 discussion 相关的所有 posts,通过调用 prisma.posts.deleteMany 方法,使用了一个简单的查询来选择与指定的 discussionId 相关的所有 posts。

最后,我们删除了指定的 discussion,通过调用 prisma.discussion.delete 方法,使用了一个简单的查询来选择指定的 discussionId。

在最后,我们调用了 deleteDiscussion 函数,并传入要删除的 discussionId。在 catch 块中,我们捕获并打印了任何错误。最后,在 finally 块中,我们使用 prisma.$disconnect 方法来关闭数据库连接。

请注意,以上代码仅为示例用途,你需要根据你的数据模型进行适当的更改。


原文地址: https://www.cveoy.top/t/topic/pEvX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录