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
相关产品推荐
相关产品推荐

