使用 Prisma 通过关联表查询多对多关系
Posted
技术标签:
【中文标题】使用 Prisma 通过关联表查询多对多关系【英文标题】:Querying many-to-many relations via associative table with Prisma 【发布时间】:2021-04-04 04:01:33 【问题描述】:我是 Prisma 的新手,虽然到目前为止它非常容易上手,但我遇到了一个我似乎无法找到好的答案的问题。我已经阅读了docs about relation queries,但据我了解,Prisma 不支持通过流利的 api 进行多对多。每个查询都必须返回一个实体,然后您可以添加相关表,但在我的情况下,我的查询将返回许多我想加入的实体。
这是我的架构的一个简单示例:
model User
id String @id @default(uuid())
model Workspace
id String @id @default(uuid())
model WorkspaceUser
workspace Workspace @relation(fields: [workspaceId], references: [id])
workspaceId String
user User @relation(fields: [userId], references: [id])
userId String
我希望做类似的事情:
await prisma.workspaceUser.findMany(
where: userId: "123" ,
).workspaces();
另外,我注意到智能感知显示有一个 .join() 方法,但文档中没有提到它。
Prisma 是否提供解决此问题的方法,还是我应该使用 $queryRaw
?
【问题讨论】:
【参考方案1】:您可以将确切的语法用于单选,也就是
await prisma.workspaceUser.findUnique(
where: userId: "123" ,
).workspace();
对于许多选择,它将作为数组返回,但如果您指定include
,则仍应具有相关实体
const allRecords = await prisma.workspaceUser.findMany(
where: userId: "123" ,
include: workspace: true,
);
然后你可以做类似allRecords[i].workspace;
【讨论】:
以上是关于使用 Prisma 通过关联表查询多对多关系的主要内容,如果未能解决你的问题,请参考以下文章