GraphQL中查询引用的字段是否必须属于Query类型?
关于GraphQL字段定义的疑问解答
核心结论
你当前定义的groups是User类型下的字段,不能直接作为根查询字段单独使用,所以你写的单独查询groups的语句无法执行。如果想要直接查询用户群组,必须把groups字段也添加到Query类型中。
详细解释
GraphQL的根查询字段(即直接写在query块下的字段)必须是Query类型中声明的字段。你现在的groups属于User类型的关联字段,只能在查询User对象时嵌套调用——就像你第一个查询里那样,从user字段返回的User实例上去获取关联的groups。
如果想要单独执行groups查询,需要做两步:
- 在SDL的
Query类型中添加groups字段:
type Query { user(user_id: Int): User groups(user_id: Int): [Group] # 假设Group是你定义的群组类型,返回数组格式 }
- 实现对应的
groups解析器函数,接收user_id参数并返回该用户的群组数据。
补充:两种groups字段的区别
- 作为
User类型的字段:解析器的第一个参数是父对象(User实例),通常可以直接从父对象中获取用户ID,不需要额外传递user_id参数(你当前查询里传了也能工作,但属于冗余操作)。 - 作为
Query类型的字段:解析器没有父对象依赖,必须通过参数user_id来指定要查询的用户,是独立的根级查询。
内容的提问来源于stack exchange,提问作者Yaniv Gabay
相关产品推荐
相关产品推荐

