如何在Hasura中修改GraphQL查询响应,去除多余的id_object嵌套层级?
Hasura查询嵌套结构扁平化解决方案
你可以根据场景选择以下两种实现方案:
方案1:前端直接转换响应(无需改动后端,实现成本最低)
拿到原始返回结果后直接对数组做映射处理即可,JavaScript示例代码如下:
const rawResponse = { "data": { "ids": [ {"id_object": {"id": 33102}}, {"id_object": {"id": 33104}} ] } } const targetResponse = { data: { ids: rawResponse.data.ids.map(item => ({id: item.id_object.id})) } }
得到的targetResponse就完全符合你需要的结构。
方案2:修改Hasura配置,查询直接返回目标结构(前端无需额外处理)
你可以给对应表添加计算字段,把嵌套的id直接暴露为平级字段:
- 打开Hasura控制台,进入
Data页面找到你查询的源表,点击Modify标签 - 找到
Computed Fields模块,点击添加计算字段 - 自定义字段名为
id,关联对应的SQL函数,示例函数写法如下(替换为你实际的表名、关联字段名):
CREATE OR REPLACE FUNCTION public.get_associated_id(row public.your_source_table) RETURNS integer AS $$ SELECT id FROM public.id_object WHERE id = row.id_object_id; $$ LANGUAGE sql STABLE;
- 配置完成后,查询语句可以直接简化为:
query fetchIds { ids { id } }
返回结果会直接匹配你要求的无嵌套结构。
内容的提问来源于stack exchange,提问作者Punit
相关产品推荐
相关产品推荐

