首页 > 解决方案 > 从嵌套的 Prisma 事务中创建多条记录?

问题描述

我有以下 Prisma 查询在用户注册时运行,它创建用户帐户以及创建他们将属于的团队。

prisma.account.create({
  data: {
    team: {
      create: { name: team_name },
    },
    username,
    email,
    password
  },
})

但是,用户还需要通过电子邮件验证他们的团队创建。为此,我需要为其创建记录的第三个数据库表,prisma Schema 为:

prisma.team_verification.create({
  data: {
    team: {
      connect: {
        team_id,
      },
    },
  },
})

有什么办法可以合并这两个查询,以便在注册时创建一个新团队,一个带有 team_id = 新团队的新“帐户”,以及一个带有 team_id = 新团队的新“team_verification”?

标签: postgresqlprisma

解决方案


您可以使用交互式事务。由于这是一个 previewFeature,您应该在生成器客户端中配置它。

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["interactiveTransactions"]
}

接着:

const user: User = await prisma.$transaction(async (prisma) => {

   let user= await prisma.account.create({
    data: {
      team: {
        create: { name: team_name },
      },
      username,
      email,
      password
    },
  })
  
  prisma.team_verification.create({
   data: {
    team: {
     connect: { user.id }
    },
   },
 })

  return user

})

推荐阅读