TypeORM Apollo 嵌套查询解析器
Posted
技术标签:
【中文标题】TypeORM Apollo 嵌套查询解析器【英文标题】:TypeORM Apollo nested query resolver 【发布时间】:2019-09-12 03:37:02 【问题描述】:我有一个架构(定义了适当的数据库表和实体类),例如
type User
id: Int!
phoneNumber: String!
type Event
id: Int!
host: User
我正在尝试使用 Apollo 来编写类似
的查询Query
event(id:1)
host
firstName
但我不知道如何让 Apollo 库将主机字段中的用户类型解析为存储在事件对象上的 hostId。
我修改了事件以返回 hostId 字段,它工作得很好,但 Graphql 不会将 id 解析为适当的用户类型。我错过了什么?
编辑:缺少解析器代码
event: async (parent: any, args: id: number ) =>
const eventRepository = getConnection().getRepository(Event);
const event = await eventRepository.findOne(args.id);
return event;
,
我设法通过使用findOne(args.id, relations: ['host'])
获得了一个工作版本,但我不喜欢这样,因为它似乎适合委派给 graphql 来处理。
【问题讨论】:
请附上相关的解析器代码。 【参考方案1】:你的解析器应该是这样的
const resolver =
Query:
event: async (_: any, args: any) =>
return await event.findOne(args.id);
,
event:
host: async (parent: any, args: any, context: any) =>
return await user.find( id: parent.id );
;
【讨论】:
这不是违背了使用graphql的目的吗?如果我必须手动编写所有这些嵌套的案例,我不会比使用 REST 时更好。 @BrandonOlivier 你找到答案了吗?我面临同样的问题 - 必须绘制出每个嵌套案例。 恐怕我最终放弃了 GraphQL 以加快我的项目。 @BrandonOlivier 我认为这不准确。使用 REST 端点,您可能需要执行多个 API 调用来获取与该事件关联的事件和用户,而使用 GraphQL 您只需执行一个。关于您的问题,您可能不必为用户创建解析器。如果与事件存在数据库关系,您可以检索事件用户关系。如果用户总是被事件调用,那可能是最有效的。以上是关于TypeORM Apollo 嵌套查询解析器的主要内容,如果未能解决你的问题,请参考以下文章
NestJS 中的 TypeORM - 如何在实体中获取 MySQL 嵌套对象并对子关系进行“位置”查询?
具有多个嵌套解析器并将字段映射到参数的 GraphQL 查询