【问题标题】:TypeOrm QueryBuilder Multiple relations to one tableTypeOrm QueryBuilder 一个表的多个关系
【发布时间】:2021-09-25 22:06:06
【问题描述】:

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

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

  @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: table name "user" specified more than once"

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

【问题讨论】:

    标签: javascript node.js typescript nestjs typeorm


    【解决方案1】:

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

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

    我做了什么:

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

    现在觉得自己很愚蠢。

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2020-05-02
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      相关资源
      最近更新 更多