You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo关联对象获取疑问:内存数据库原型开发中的关系解析

Apollo关联字段返回null的解决方法

核心结论

Apollo 不会根据GraphQL类型定义自动组装关联对象,必须手动处理关联关系,要么编写字段解析器,要么通过数据加载器实现关联查询。

为什么asx.company返回null

你的asx类型定义里虽然声明了company字段,但Apollo的默认解析器只会返回当前数据对象上同名的属性值。如果你的内存asx数据中没有直接存储company对象(只存了对方ID),默认解析器找不到对应属性,就会返回null。

简便实现方式

1. 编写字段级解析器

这是原型阶段最直接的方案,针对关联字段单独编写解析逻辑,从内存数组中通过ID匹配关联对象:

// 假设内存数据存储在context中,比如context.asxs、context.companies
const resolvers = {
  asx: {
    company: (parent, _, context) => {
      // parent为当前asx对象,假设其存储了关联company的ID字段为companyId
      return context.companies.find(company => company.id === parent.companyId);
    }
  },
  // 双向关联的company.asx字段也需要对应解析器
  company: {
    asx: (parent, _, context) => {
      return context.asxs.find(asx => asx.id === parent.asxId);
    }
  }
};

2. 预关联数据(不推荐)

如果数据量极小,也可以在根查询返回asx列表时,预先遍历并关联好company对象,但这种方式缺乏灵活性,后续扩展或数据量增大后维护成本高。

进阶优化(可选)

如果后续原型迭代中数据量变大,频繁调用find会产生性能问题,可以使用Apollo的DataLoader工具实现批量查询和缓存,减少重复的数组查找操作,提升查询效率。

内容的提问来源于stack exchange,提问作者Qiksar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:30:06