【问题标题】:GraphQL conditiontal FilterGraphQL 条件过滤器
【发布时间】:2018-04-12 04:59:11
【问题描述】:

使用 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 graphql-js graphcool


    【解决方案1】:

    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,但您可能需要仔细检查您的架构以确定。

    【讨论】:

    • 非常感谢。我不知道变量不一定是标量!我在 javascript 中有一个 hack,我将最喜欢的变量设置为未定义(非空),它会按照我想要的方式运行。我认为如果一个变量未定义,那么它就会被忽略。这要好得多。我正在使用 GraphqlCool,所以这很容易。我只需为 $photoFilter 指定 PhotoFIlter 的类型。
    猜你喜欢
    • 2015-03-15
    • 2021-11-20
    • 2017-06-13
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多