通过关联 table 与 Prisma 查询多对多关系

Querying many-to-many relations via associative table with Prisma

我是 Prisma 的新手,虽然到目前为止上手非常容易,但我 运行 遇到了一个我似乎找不到好的答案的问题。我已经通读了 docs about relation queries,但据我了解,Prisma 不支持通过流利 api 实现多对多。每个查询都必须 return 一个实体,然后您可以添加相关的 table,但在我的例子中,我的查询将 return 许多我想加入的实体。

这是我的架构的一个简单示例:

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();

另外,我注意到 intellisense 显示有一个 .join() 方法,但文档中没有提到它。

Prisma 是否提供解决此问题的方法,或者我应该使用 $queryRaw

您可以对单个选择使用相同的语法,也就是

await prisma.workspaceUser.findUnique({
  where: { userId: "123" },
}).workspace();

对于许多选择,它将作为数组返回,但如果您指定 include

,它仍应具有相关实体
const allRecords = await prisma.workspaceUser.findMany({
  where: { userId: "123" },
  include: {workspace: true},
});

然后你可以做类似allRecords[i].workspace;

的事情