gpt4 book ai didi

hasura - 仅当变量不为null时,如何应用Hasura `where`过滤器?

转载 作者:行者123 更新时间:2023-12-02 02:45:04 25 4
gpt4 key购买 nike

我有这样的查询:

query getUsers ($setId: Int) {
user(where: { user_sets: { set_id: { _in: [$setId] } } }) {
id
name
status
user_sets {
set {
name
}
}
# more fields...
}
}

我正在寻找的是一种不应用 where过滤器并在 $setId为null时给出所有条目的方法。我想避免动态编写查询-这样做很容易,但是我们希望在静态.graphql文件中进行查询:

const query = `
query getUsers (${ setId ? '$setId: Int' : ''}) {
user(${ setId ? 'where: { user_sets: { set_id: { _in: [$setId] } } }' : '' }) {
`

我尝试过的一些事情:
  • @skip@include一样使用GraphQL directives,但是看来这些仅适用于返回的字段,而不适用于where过滤器
  • 的任何部分
  • boolExp_is_null一样使用Hasura _or s,但是似乎它们不能直接测试变量,它们只能将变量与列内容
  • 进行比较

    最佳答案

    如果使用 _eq boolExp,则默认情况下,如果变量为null,则似乎全部匹配。我没有看到此消息,因为此查询使用的是_in

    如果将$ setId作为null传递,则更改为所有项:

    query getUsers ($setId: Int) {
    user(where: { user_sets: { set_id: { _eq: $setId } } }) {
    id
    name
    status
    user_sets {
    set {
    name
    }
    }
    # more fields...
    }
    }

    这是因为Hasura遵循SQL的方式是使 null无法与任何东西媲美(只有 _is_null可以匹配在可为空的列中设置为null的值)。

    因此, { _eq: null }在逻辑上无法匹配任何内容,因此已对其进行了优化。这:
    (where: { user_sets: { set_id: { _eq: $setId } } })

    ...变成这样:
    (where: { user_sets: { set_id: {} } }

    ...并且因为 {} trueExp ,被视为true,所以它进行了优化,从而有效地成为 WHERE 'true'

    关于hasura - 仅当变量不为null时,如何应用Hasura `where`过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809762/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com