GraphQL嵌套AND与OR运算符过滤数据报错求助
GraphQL嵌套AND/OR过滤查询错误解决方法
你需要实现按country_id过滤数据,同时让search值匹配id或name字段,但原查询报错提示Field "or" is not defined by type YOUR_TYPE,核心问题是查询结构不符合后端GraphQL Schema的过滤规则,另外原查询里还有个小语法错误。
修正后的查询方案
方案1:标准嵌套逻辑结构
如果你的后端支持逻辑运算符嵌套(比如Prisma、Hasura这类常见实现),调整后的查询如下,注意去掉$ search里的空格:
query books($search: String, $country_id: Int) { books(where: { and: [ { country_id: { eq: $country_id } }, { or: [ { id: { like: $search } }, { name: { like: $search } } ] } ] }) { # 必须指定要返回的字段,示例如下 id name country_id } }
方案2:简化同级逻辑结构
如果后端Schema要求or与其他过滤字段同级(无需嵌套在and数组里),可以用更简洁的写法:
query books($search: String, $country_id: Int) { books(where: { country_id: { eq: $country_id }, or: [ { id: { like: $search } }, { name: { like: $search } } ] }) { id name country_id } }
关键注意事项
- 语法错误修复:原查询中
$ search多了一个空格,会导致变量识别失败,必须改成$search。 - Schema兼容性:确保你的GraphQL Schema中的过滤类型(比如
BookWhereInput)确实定义了and和or字段。如果Schema不支持这些逻辑运算符,需要后端调整Schema配置,或者改用后端支持的过滤方式。
内容的提问来源于stack exchange,提问作者Steelone D
相关产品推荐
相关产品推荐

