【问题标题】:Prisma delete many to many relationship with Composite KeyPrisma 删除与复合键的多对多关系
【发布时间】:2021-10-10 15:57:08
【问题描述】:

我在这里有这个架构:

model label {
  title         String          @id @db.VarChar(16)
  color         String          @db.VarChar(16)
  labelplaylist labelplaylist[]
}

model labelplaylist {
  playlistId Int
  labelId    String   @db.VarChar(16)
  label      label    @relation(fields: [labelId], references: [title])
  playlist   playlist @relation(fields: [playlistId], references: [id])

  @@id([playlistId, labelId])
  @@index([labelId], name: "labelId")
}

model playlist {
  id              Int             @id @default(autoincrement())
  createdAt       DateTime?       @default(now()) @db.DateTime(0)
  title           String          @db.VarChar(100)
  labelplaylist   labelplaylist[]

  @@index([userId], name: "userId")
}

我只想删除标签和播放列表之间的关系。我试过这样做:

const deleteRelation = await prisma.labelplaylist.delete({
    where: {
        playlistId_labelId: 
    },
})

我有标签和播放列表表的主键,但我不知道如何获取主键 => playlistId_labelId。

感谢您的帮助。

【问题讨论】:

    标签: mysql prisma prisma2


    【解决方案1】:

    这是使用复合键查询的语法

        const deleteRelation = await prisma.labelplaylist.delete({
            where: {
                playlistId_labelId: {
                    playlistId: playListIdVariable, //replace with appropriate variable
                    labelId: labelIdVariable, //replace with appropriate variable
                },
            },
        });
    

    您可以在 Prisma 文档中 CRUD Reference Guideget record by Compound ID or Compound unique identifier 小节中阅读更多信息。此引用显示读取数据,但 where 条件对于删除和更新也是类似的。

    【讨论】:

      【解决方案2】:

      由于是显式多对多关系,嵌套的deleteMany 只删除关系表记录,就像disconnect 一样。然后你可以write your query like that:

      await req.db.playlist.update({
        data: {
          labels: {
            deleteMany: {},
          },
        },
        where: {
          id: labelId,
        },
      })
      

      或者反过来。

      它不会删除您的相关表记录,只会删除它们之间的链接。

      【讨论】:

        猜你喜欢
        • 2015-12-13
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2015-08-19
        • 1970-01-01
        • 2020-01-08
        • 2023-04-07
        相关资源
        最近更新 更多