【问题标题】:Filter by id of a relation按关系的 id 过滤
【发布时间】:2019-06-19 13:18:42
【问题描述】:

我想在棱镜中过滤关系 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 实体的所有者为 userIDArea 的所有者为 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 prisma-graphql


    【解决方案1】:

    我从 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 需要以标量的形式公开,这样您就可以过滤它们。

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2021-12-15
      • 2012-01-23
      • 2014-01-15
      • 2018-05-15
      相关资源
      最近更新 更多