GraphQL能否不关联类型查询非空字段 可否通过集号查询对应角色名
GraphQL问题解答
参考类型定义
type Character { id: ID! name: String episodes: [Episodes!]! } type Episodes { episode_number: Int title: String season: Int }
问题1:是否支持不引用字段所属类型就查询非空字段
- 结论:不支持
- 解释:GraphQL查询严格遵循Schema定义的类型层级结构,字段的
!非空标记仅用于运行时校验该字段的返回值不能为null,不会改变查询的层级规则。任何字段的查询都必须嵌套在其所属的父类型的字段选择集内。
举个实际场景示例:如果要查询Character类型的非空id字段,必须先通过根查询中返回Character/[Character]类型的入口字段进入该类型层级,再声明要查询的id字段,不能直接在根层级查询id。
问题2:是否可以查询episode_number字段,获取对应剧集内的Character的name字段值
- 结论:基于上述给出的当前类型定义无法实现,调整Schema后可实现
- 解释:当前你给出的Schema中,
Character和Episodes的关联是单向的:仅在Character类型中定义了关联剧集的episodes字段,Episodes类型没有反向关联所属角色的字段,因此无法通过剧集反查对应的角色列表。
如果需要实现该需求,首先调整Episodes类型定义,添加反向关联字段:
type Episodes { episode_number: Int title: String season: Int characters: [Character!]! # 新增反向关联角色列表的字段 }
调整后即可编写如下查询实现需求:
query GetCharactersByEpisode($episodeNumber: Int!) { episode(episode_number: $episodeNumber) { episode_number characters { name } } }
内容的提问来源于stack exchange,提问作者Chris Simmons
相关产品推荐
相关产品推荐

