【问题标题】:Updating a many-to-many relationship in Prisma在 Prisma 中更新多对多关系
【发布时间】:2021-04-11 16:38:48
【问题描述】:

我正在尝试找出实现以下架构的 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 之类的类别列表,如果它们不存在,我需要将其插入类别表并将帖子添加到其中。如果该类别确实存在,我需要使用上面插入的帖子更新记录,保留所有附加帖子。

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

【问题讨论】:

    标签: prisma


    【解决方案1】:

    对于模型,可以简化如下,因为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 将创建(如果不存在)并将类别添加到帖子中。

    【讨论】:

    • 感谢您的回答。但是,该代码有效,但是,当我使用相同的类别但不同的作者进行更新插入时, findMany() 查询将引发恐慌。常量帖子 = 等待 prisma.post.findMany( {include: {categories:true}});使用 prisma studio 查询 post 表也会因此失败。我试图了解导致失败的原因,但对我来说并不明显。
    • 必须使用附加字段修改类别表:lastUpdated DateTime @updatedAt 才能使其正常工作。似乎您需要另一个字段才能让 findMany() 查询在多对多关系中工作
    猜你喜欢
    • 2021-07-23
    • 2021-12-04
    • 2022-01-27
    • 1970-01-01
    • 2021-09-17
    • 2021-08-24
    • 2021-10-03
    • 2023-01-27
    • 2022-12-04
    相关资源
    最近更新 更多