You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL查询职位信息时可选参数为空返回空数组问题求助

问题原因

问题出在SQL的三值逻辑特性:当$category、$location、$type传入空值(null)时,你写的slug: {_eq: $xxx}筛选条件会被转换为SQL语句中的slug = NULL。而在SQL规则里,NULL和任何值做相等判断的结果都为UNKNOWN,WHERE子句仅会保留判断结果为TRUE的行,因此没有任何记录符合筛选条件,最终返回空数组。

你移除这三个筛选条件后查询就恢复正常,也验证了就是这三个强制相等的条件在参数为空时过滤了所有结果。

修复方案

你可以根据所用的GraphQL引擎选择对应方案:

  • 若使用Hasura等支持动态条件的GraphQL引擎,可将可选参数的筛选逻辑调整为「参数为空时直接跳过该条件」,参考写法如下:
query getJobsSearch(
$location: String
$type: String
$category: String
$time: String
$limit: Int
) {
jobs(
  order_by: {created_at: desc},
  where: {
    deleted_at: {_is_null: true},
    created_at: {_gt: "2021-06-16T10:06:38.551984+00:00"},
    _and: [
      {_or: [{job_category: {slug: {_eq: $category}}}, {$category: {_is_null: true}}]},
      {_or: [{location: {slug: {_eq: $location}}}, {$location: {_is_null: true}}]},
      {_or: [{job_type: {slug: {_eq: $type}}}, {$type: {_is_null: true}}]}
    ]
  },
  limit: $limit
)
  • 若为自行实现的GraphQL resolver,可在拼接查询条件的逻辑中增加判断:仅当参数不为空时,才将对应的slug筛选条件加入WHERE子句,避免生成slug = NULL的无效过滤条件。
  • 也可以在前端传参层做处理:如果用户没有选择对应筛选项,就不传该参数,同时在GraphQL schema中给参数设置默认值,resolver层识别到默认值时直接跳过对应筛选。

内容的提问来源于stack exchange,提问作者MAYANK KUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:27:04