按关系ID过滤

时间:2019-01-25 17:04:03

标签: prisma prisma-graphql

我想在prisma中过滤一个关系ID,并获得相同的实体,而不是相关的实体。简单的例子:

type User {
  firstName: String!
  lastName: String!

  isOwner: [Meta!]! @relation(link: INLINE, name: "User_Meta_Owner")

  id: ID! @id
}

type Meta {
  owner: User! @relation(link: INLINE, name: "User_Meta_Owner")
  area: Area! @relation(link: INLINE, name: "Meta_Area")

  id: ID! @id
}

type Area {
  id: ID! @id
  name: String!

  meta: Meta! @relation(link: INLINE, name: "Meta_Area")
}

在这种情况下,我希望所有Meta个实体的所有者均为ID userID,而Area的ID为areaID

可能的事:

ctx.db.user({ id: 'userID' }).isOwner()

这将获取所有Meta,而无需对该区域进行过滤。

我想要的是类似的东西

ctx.db.user({ id: 'userID' }).isOwner({ where: { area: 'areaID' })
ctx.db.metas({ where: [{ owner: 'userID' }, { area: 'areaID' }] })

由于属性区域只是一个关系,所以prisma并没有给我机会过滤甚至获取ID。

即:

await ctx.db.user({ id: 'userID' }).isOwner()

将导致对象数组,如:

[{
  id: '...'
}]

我的问题是,有什么方法可以得到想要的结果而又不删除关系并存储简单的字符串吗?

1 个答案:

答案 0 :(得分:0)

我从prisma成员那里得到了一个答案,该答案目前仅适用于这样的模型:

type Meta {
  owner: User! @relation(link: INLINE, name: "User_Meta_Owner")
  area: Area! @relation(link: INLINE, name: "Meta_Area")
  ownerId: ID! @db(name: "User")
  areaId: ID! @db(name:"Area")
  id: ID! @id
}

因此,id需要公开为标量,因此您可以对其进行过滤。