TypeOrm QueryBuilder 多个关系到一张表

时间:2021-07-17 11:46:28

标签: javascript node.js typescript nestjs typeorm

感谢您阅读并提前提供帮助!

我有以下问题。在我的“报价”实体上,与“用户”有多种关系,如下所示:

  @ManyToOne(() => User, (user) => user.offers, { nullable: false })
  owner: User;
  @ManyToMany(() => User, (user) => user.participates, {
    nullable: true,
    cascade: true,
  })
  @JoinTable()
  participants: User[];
  @ManyToMany(() => User, (user) => user.applied, {
    nullable: true,
    cascade: true,
  })
  @JoinTable()
  applicants: User[];

问题是 - 如何使用查询构建器加载所有这些关系?当我使用 leftJoinAndSelect 时它会抛出一个错误说:“QueryFailedError:表名“用户”指定了不止一次”

return await this.getOffersBaseQuery()
  .andWhere('o.id = :id', {
    id,
  })
  .leftJoinAndSelect('o.skill', 'skill')
  .leftJoinAndSelect('o.owner', 'user')
.leftJoinAndSelect('o.participants', 'user')
  .select([
    'o',
    'skill.id',
    'skill.name',
    'user.username',
    'user.email',
    'user.id',
  ])
  .getOne();

以防万一 - 基本查询:

private getOffersBaseQuery() {
    return this.offerRepository.createQueryBuilder('o').orderBy('o.id', 'DESC');
  }

1 个答案:

答案 0 :(得分:1)

没关系,这个问题的答案就在 TypeORM 文档中。我所要做的就是使用不同的别名

.leftJoinAndSelect('o.participants', 'user')

我用的:

.leftJoinAndSelect('o.participants', 'participants')

现在觉得自己很愚蠢。