使用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中做到这一点。
答案 0 :(得分:2)
GraphQL变量不一定必须是标量 - 它们也可以是输入类型。所以你的查询看起来像这样:
query ($first: Int, $skip: Int, $filter: PhotoFilter) {
allPhotos (
first: $first
skip: $skip
filter: $filter
)
{
#requested fields
}
}
您在查询中传递的变量现在将包含{ favorited: true }
的对象(即filter
),而不是favorited
的布尔值。
要涵盖所有三种情况,请发送:
{ favorited: true }
{ favorited: false }
{}
(无过滤器)编辑:我认为在这种情况下输入类型的名称将是PhotoFilter
,但您可能需要仔细检查您的架构以确定。