Graphql 中的可选变量
Optional variable in Graphql
我有一个这样的 graphql 查询:
query SomeQuery($id: Int) {
some_query(where: {id: {_eq: $id}}) {
id
name
}
}
当我 运行 时,它期望一个 id
作为变量。我怎样才能使该变量可选?当没有给出 id
时,它应该显示所有结果
此变量 $id: Int
已声明为可选变量,因此您需要将其强制包含!运算符 $id: Int!
。服务器中需要存在逻辑以检查传递的 id 是否为 null/empty 然后 return 一切。
我不知道如何将一个变量声明为可选的,但也无法像您在此处使用 Hasura 演示的那样忽略表达式的其余部分。
相反,您应该定义您的查询,使您收到的变量是实际的布尔表达式,并有条件地从调用者那里传入变量。尝试像这样编写您的查询:
query getItems($where: items_bool_exp) {
items(where: $where) {
name
}
}
这使得过滤器成为可选的,因此如果您将 null 传递给 $where
,您将取回所有内容。否则,您可以将实际过滤条件作为变量传递并返回您期望的结果
{
"where": {
"id": {
"_eq": 42
}
}
}
您只需更新实际发出查询的客户端,以使用关于是否应发送 ID 谓词的正确条件逻辑。
由于这是用 reactjs
标记的,这里是 JS 的解决方案。
这实际上是可行的,但在创建查询时需要进行一些字符串插值。
const generateSomeQuery = (id?: string) => gql`
query SomeQuery(
${id ? '$id: uuid' : ''}
) {
some_query(
where: {
${id ? 'id: {_eq: $id}' : ''}
}
) {
id
name
}
}
`
我有一个这样的 graphql 查询:
query SomeQuery($id: Int) {
some_query(where: {id: {_eq: $id}}) {
id
name
}
}
当我 运行 时,它期望一个 id
作为变量。我怎样才能使该变量可选?当没有给出 id
此变量 $id: Int
已声明为可选变量,因此您需要将其强制包含!运算符 $id: Int!
。服务器中需要存在逻辑以检查传递的 id 是否为 null/empty 然后 return 一切。
我不知道如何将一个变量声明为可选的,但也无法像您在此处使用 Hasura 演示的那样忽略表达式的其余部分。
相反,您应该定义您的查询,使您收到的变量是实际的布尔表达式,并有条件地从调用者那里传入变量。尝试像这样编写您的查询:
query getItems($where: items_bool_exp) {
items(where: $where) {
name
}
}
这使得过滤器成为可选的,因此如果您将 null 传递给 $where
,您将取回所有内容。否则,您可以将实际过滤条件作为变量传递并返回您期望的结果
{
"where": {
"id": {
"_eq": 42
}
}
}
您只需更新实际发出查询的客户端,以使用关于是否应发送 ID 谓词的正确条件逻辑。
由于这是用 reactjs
标记的,这里是 JS 的解决方案。
这实际上是可行的,但在创建查询时需要进行一些字符串插值。
const generateSomeQuery = (id?: string) => gql`
query SomeQuery(
${id ? '$id: uuid' : ''}
) {
some_query(
where: {
${id ? 'id: {_eq: $id}' : ''}
}
) {
id
name
}
}
`