Postgres / TypeORM-多个联接。我应该如何格式化查询?

时间:2019-10-25 09:59:32

标签: postgresql typeorm

我正在构建一个后端微服务,该服务使用postgres作为数据库和TypeORM(NodeJs)库来管理与之的连接。

想象一下,我的数据库包含3个表/实体。

  1. 用户表(主列为-id)
  2. 配置文件表(主列ID,然后指向用户表ID列的外键user_id) 可能有多个个人资料行链接到一个用户
  3. 体验表(主列ID,然后指向配置文件表ID列的外键profile_id列) 可能有多个经验行链接到一个配置文件

a)我可以执行一个复杂的查询来获取个人资料行和与其链接的所有体验行吗?

  getFullProfile(profileId: number) {
    return this.profileEntityRepository.createQueryBuilder('profile')
      .where('profile.id = :profileId', { profileId })
      .innerJoinAndMapMany('profile.experience', ExperienceEntity, 'experience', 'experience.id = profile.id')
      .getOne();
  }

可悲的是,这不会返回任何结果(如果我注释了innerJoinAndMapMany行,则会返回结果)。

有什么建议吗?不必是基于TypeORM api的答案,简单的普通查询就足够了。

谢谢!

1 个答案:

答案 0 :(得分:0)

好,我解决了。

我将typeORM查询更改为此:

  getFullProfile(profileId: number) {
    return this.profileEntityRepository.createQueryBuilder('profile')
      .leftJoinAndSelect('profile.experiences', 'experience')
      .where('profile.id = :profileId', { profileId })
      .getOne();
  }

要执行此操作,我还需要在配置文件实体中添加OneToMany列,如下所示:

  @OneToMany(type => ExperienceEntity, experience => experience.profile)
  experiences: ExperienceEntity[];

这不会在表中创建“经验”列,但是TypeORM才需要了解这种情况。