Prisma 删除与 Composite Key 的多对多关系
Prisma delete many to many relationship with Composite Key
我这里有这个模式:
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")
}
我只想删除标签和播放列表之间的关系table。我试过这样做:
const deleteRelation = await prisma.labelplaylist.delete({
where: {
playlistId_labelId:
},
})
我有标签和播放列表的主键table,但我不知道如何获得主键=> playlistId_labelId。
感谢您的帮助。
这是使用复合键进行查询的语法
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 的 通过复合 ID 或复合唯一标识符获取记录 小节中阅读更多内容。此参考显示读取数据,但 where
条件与删除和更新类似。
因为它是一个 显式 多对多关系,嵌套 deleteMany
只删除关系 table 记录,就像 disconnect
.然后你可以 write your query like that:
await req.db.playlist.update({
data: {
labels: {
deleteMany: {},
},
},
where: {
id: labelId,
},
})
或相反。
它不会删除您的相关 table 记录,只会删除它们之间的链接。
我这里有这个模式:
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")
}
我只想删除标签和播放列表之间的关系table。我试过这样做:
const deleteRelation = await prisma.labelplaylist.delete({
where: {
playlistId_labelId:
},
})
我有标签和播放列表的主键table,但我不知道如何获得主键=> playlistId_labelId。
感谢您的帮助。
这是使用复合键进行查询的语法
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 的 通过复合 ID 或复合唯一标识符获取记录 小节中阅读更多内容。此参考显示读取数据,但 where
条件与删除和更新类似。
因为它是一个 显式 多对多关系,嵌套 deleteMany
只删除关系 table 记录,就像 disconnect
.然后你可以 write your query like that:
await req.db.playlist.update({
data: {
labels: {
deleteMany: {},
},
},
where: {
id: labelId,
},
})
或相反。
它不会删除您的相关 table 记录,只会删除它们之间的链接。