GraphQL 条件过滤器

GraphQL conditiontal Filter

使用 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 领域做到这一点。

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

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

您随查询一起传递的变量现在将包含 filter 的对象(即 { favorited: true }),而不是 favorited 的布尔值。

要涵盖所有三种情况,请发送:

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

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