8

使用 GraphCool 后端,有没有办法在查询中使用条件过滤器?

假设我有这样的查询:

query ($first: Int, $skip: Int, $favorited: Boolean) {
  allPhotos (
    first: $first
    skip: $skip
    filter: {
      favorited: $favorited
    }
  )
  {
    id
    url
    title
    favorited
  }
}

//variables: { "first": 10, "skip", "favorited": true }

上面的查询将:

1) 只获取收藏的照片。

2)只获取不喜欢的照片。

我的问题是我希望能够:

1) 查询仅收藏或未收藏的照片。

2) 查询照片,不管它们是否被收藏。

如何有条件地包含过滤器?我可以吗?我正在用 Javascript 中的 react-apollo 做一些事情,我可以用代码找出一个解决方案,但我想知道是否有办法在 graphql 领域做到这一点。

4

1 回答 1

8

GraphQL 变量不一定是标量——它们也可以是输入类型。因此,您的查询可能如下所示:

query ($first: Int, $skip: Int, $filter: PhotoFilter) {
  allPhotos (
    first: $first
    skip: $skip
    filter: $filter
  )
  {
    #requested fields
  }
}

您与查询一起传递的变量现在将包含一个对象(即{ favorited: true }) forfilter而不是布尔值 for favorited

要涵盖所有三个场景,请发送:

  1. { favorited: true }
  2. { favorited: false }
  3. {}(无过滤器)

编辑:我认为在这种情况下输入类型的名称将是PhotoFilter,但您可能需要仔细检查您的架构以确定。

于 2017-10-31T11:31:32.023 回答