Graphql包含指令

时间:2017-11-22 10:48:35

标签: graphql

我有一个查询,它将状态作为输入变量,它是(future,past,all)的枚举。

我希望仅在状态未来时返回某些字段。我尝试过使用@include,但它似乎只会接受一个布尔值。

有没有办法让这个工作:

aField @include(if: $status == future)

2 个答案:

答案 0 :(得分:1)

我认为你甚至不能使用带有@include的布尔字段 - 只有文字/查询变量,所以表达式也是禁止的。

如果它非常重要,并且您能够修改API /架构,则可以(ab)使用接口功能 - 将来的实体解析为一种类型,将过去的实体解析为另一种类型,然后您可以使用片段来根据它选择字段:

interface Competition {
    id: ID!
    name: String!
    status: Status!
    something: String
}

type FutureCompetition implements Competition {
    // same fields
}

type PastCompetition implements Competition {
    // same fields
}

然后你可以用这样的东西查询:

competitions {
    id
    name
    status
    ... on FutureCompetition {
        something
    }
}

一个可能更容易做的事情就是简单地在一个中执行两个查询并合并客户端的结果,假设您可以按状态查询:

pastCompetitions: competitions(withStatus: PAST) {
    id
    name
    status
}

futureCompetitions: competitions(withStatus: FUTURE) {
    id
    name
    status
    something
}

答案 1 :(得分:0)

variables是JSON。因此,您也可以尝试传递status : inputStatus==='FUTURE' ? true : false