按关系的 id 过滤

Filter by id of a relation

我想在 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: '...'
}]

我的问题是,有没有办法在不删除关系和存储简单字符串的情况下获得我想要的结果?

我从 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 公开为标量,以便您可以过滤它们。