TypeORM Apollo嵌套查询解析器

时间:2019-04-23 01:04:37

标签: javascript express graphql apollo-server typeorm

我有一个类似

的架构(已定义了适当的数据库表和实体类)
type User {
    id: Int!
    phoneNumber: String!
}

type Event {
    id: Int!
    host: User
  }

我正在尝试使用Apollo编写类似

的查询
Query{
  event(id:1){
    host{
      firstName
    }
  }
}

但是我不知道如何获取Apollo库以将host字段中的User类型解析为存储在事件对象上的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 个答案:

答案 0 :(得分:2)

您的解析器应该是这样

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 });
    }
  }
};