GraphQL中能否复用一个查询的结果作为另一查询的参数?
在GraphQL中使用一个查询的结果作为另一个查询的参数
嘿,很高兴你喜欢GraphQL!你的需求其实很常见,但确实不能像你尝试的那样直接在同一个查询里跨字段引用结果——因为GraphQL的顶级字段是并行解析的,它们之间没法直接依赖彼此的输出。不过有两种靠谱的方式实现你想要的关联查询:
1. 利用Schema的嵌套字段(推荐方案)
这是最符合GraphQL设计理念的方式,如果你的API Schema设计允许,直接把reply作为post的嵌套字段来查询,这样就能自然关联到当前post的回复。同时记得用变量替代字符串拼接,避免注入风险,也让代码更易维护:
query GetPostWithRepliesAndUser($slug: String!, $userId: String!) { post(slug: $slug) { content createdAt id slug replies { # 直接嵌套查询该post对应的所有回复 content createdAt id slug } } user(id: $userId) { username } }
调用这个查询时,只需传入两个变量:$slug对应你原来的slug值,$userId对应你原来的value值即可。
2. 分两次查询(当Schema不支持嵌套时)
如果你的API没有提供嵌套的replies字段,必须单独调用reply查询,那你需要分两步执行:
- 第一步:先查询
post获取到它的id - 第二步:用拿到的
post.id作为参数,执行reply和user的查询
第一次查询(获取post的id):
query GetPost($slug: String!) { post(slug: $slug) { id content createdAt slug } }
第二次查询(用post.id查询回复):
query GetRepliesAndUser($replyTo: ID!, $userId: String!) { reply(replyTo: $replyTo) { content createdAt id slug } user(id: $userId) { username } }
这样就能实现你想要的“用第一个查询的结果获取相关信息”的需求啦。
内容的提问来源于stack exchange,提问作者NetOperator Wibby
相关产品推荐
相关产品推荐

