在 Prisma 中更新多对多关系

时间:2021-01-05 22:00:15

标签: prisma

我正在尝试找出实现以下架构的 upsert/更新的正确方法:

model Post {
  author     String @Id
  lastUpdated DateTime   @default(now())
  categories Category[]
}

model Category {
  id     Int     @id 
  posts  Post[]
}

这是我想要做的。获取附加了类别 ID 的帖子并将其插入到上面的架构中。

出现以下命令插入帖子

     const post = await prisma.post.upsert({
         where:{
              author: 'TK' 
         },
         update:{
             lastUpdated: new Date()
         },
         create: {
             author: 'TK'
         }})

我面临的挑战是如何更新类别。我将获得类似 1,2,3 的 Catogories 列表,如果它们不存在,我需要将其插入到类别表中并将帖子添加到其中。如果该类别确实存在,我需要使用上面插入的帖子更新记录,保留所有附加的帖子。

如果我能指出正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

对于模型,可以简化如下,因为 Prisma 支持 @updatedAt 会自动更新列:

model Post {
  author      String     @id
  lastUpdated DateTime   @updatedAt
  categories  Category[]
}

model Category {
  id    Int    @id
  posts Post[]
}

至于查询,它看起来像这样:

const categories = [
  { create: { id: 1 }, where: { id: 1 } },
  { create: { id: 2 }, where: { id: 2 } },
]
await db.post.upsert({
  where: { author: 'author' },
  create: {
    author: 'author',
    categories: {
      connectOrCreate: categories,
    },
  },
  update: {
    categories: { connectOrCreate: categories },
  },
})

connectOrCreate 将创建(如果不存在)并将类别添加到帖子中。