Prisma 删除与复合键的多对多关系
Posted
技术标签:
【中文标题】Prisma 删除与复合键的多对多关系【英文标题】:Prisma delete many to many relationship with Composite Key 【发布时间】: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。
感谢您的帮助。
【问题讨论】:
【参考方案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 Guide 的 get 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,
,
)
或者反过来。
它不会删除您的相关表记录,只会删除它们之间的链接。
【讨论】:
以上是关于Prisma 删除与复合键的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章