如何在棱镜中搜索 M 到 N 的关系?
Posted
技术标签:
【中文标题】如何在棱镜中搜索 M 到 N 的关系?【英文标题】:How to search M to N relationship in prisma? 【发布时间】:2021-03-19 18:38:03 【问题描述】:我现在正在使用 prisma 进行项目。 我设计了 m 对 n 关系表。下面是我的代码。 schema.prisma
model Artists
id Int @id @default(autoincrement())
artistName String?
Albums Albums[]
Artists_Tracks Artists_Tracks[]
model Artists_Tracks
id Int @id @default(autoincrement())
trackId Int?
artistId Int?
Artists Artists? @relation(fields: [artistId], references: [id])
Tracks Tracks? @relation(fields: [trackId], references: [id])
@@index([artistId], name: "Artists_Tracks_artistId_foreign_idx")
@@index([trackId], name: "Artists_Tracks_trackId_foreign_idx")
model Tracks
id Int @id @default(autoincrement())
trackName String?
albumTrackNumber Int?
albumId Int?
Albums Albums? @relation(fields: [albumId], references: [id])
Artists_Tracks Artists_Tracks[]
@@index([albumId], name: "Tracks_albumId_foreign_idx")
这是我的棱镜代码。我想要做的是按曲目名称搜索并使用艺术家姓名获取所有曲目的信息。
+编辑) 我试过的是
// first try
optObj.include =
Albums:
select: cover: true ,
,
Artists_Tracks:
Albums: true
,
;
// second try
optObj.include =
Albums:
select: cover: true ,
,
Artists_Tracks: true,
Artists: true,
;
const result = await prisma.tracks.findMany(optObj);
并使用 promise.all 获取每首曲目的艺术家姓名。有没有办法通过一个查询一次做到这一点?我很确定会有更好的方法来做到这一点。提前谢谢你。
【问题讨论】:
【参考方案1】:根据您的架构,include
将不包含Artist
关系。它必须包含在Artists_Tracks
关系中,如下所示:
const result = await prisma.tracks.findMany(
include:
Albums:
select: cover: true ,
,
Artists_Tracks: include: Artists: true ,
,
)
通过这种方式,您可以获得每个当前曲目的Artist
。
【讨论】:
我试过这个但我得到了错误:/所以我想有什么特殊的方法可以反过来做。 include 允许我们连接多对一,但不是一对多,不是吗? 我按照你的说法解决了这个问题:/ 这是因为我的一位队友更改了 DBschema 并且没有让我们知道它。它工作完美。非常感谢。以上是关于如何在棱镜中搜索 M 到 N 的关系?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MVVM 模式中从页面导航到 WPF 中的页面?没有棱镜的概念[重复]
如何在具有棱镜的Xamarin表单中为contentview创建单独的视图模型?