如何在GraphQL嵌套查询中引用已获取的父级字段值?
解答
直接说结论:你现在写的这个嵌套查询结构里,_eq后面没有能直接引用上层age字段的写法。
原因很简单:标准GraphQL本身就不支持子字段的入参直接引用同查询里父级字段的返回值;从你用的users_by_pk查询、_eq过滤操作符、外键自动生成关联字段的特征来看,你用的是Hasura GraphQL引擎,这个引擎目前也不支持在嵌套子关系的过滤条件里直接访问父级字段的值。
这个需求完全可以实现,不用拆分多次请求,只要换个查询结构就行。Hasura提供了专门用于列值比对的_ceq(列相等)操作符,支持跨关联关系做字段值匹配,你直接从users_books表侧发起查询就能满足要求。
可直接使用的正确查询
query getUserBooksWithRestrictedAge($uuid: uuid!) { users_books( where: { # 匹配传入UUID对应的用户 user_uuid: {_eq: $uuid}, # 比对当前书籍关联记录的recommended_age和关联用户的age字段 recommended_age: {_ceq: "user.age"} } ) { book_id recommended_age # 同时返回需要的用户基础信息 user { uuid name age } } }
其他说明
如果你非要保留顶层用users_by_pk查询的结构,单次查询做不到这个过滤逻辑,只能分两步走:
- 第一步先调用
users_by_pk拿到对应用户的age值 - 第二步把拿到的
age作为独立查询变量,传入users_books的where条件里做_eq匹配
这种方式需要发两次请求,效率比上面的_ceq写法低,没有特殊需求不推荐用。
内容的提问来源于stack exchange,提问作者Amantel
相关产品推荐
相关产品推荐

