【问题标题】:How to do INNER JOIN in typeorm (postgresql)如何在 typeorm (postgresql) 中进行 INNER JOIN
【发布时间】:2021-06-30 21:57:53
【问题描述】:

我有这两个实体:

@Entity()
export class Member {
    @PrimaryColumn({ name: 'room_id' })
    roomId: number;

    @PrimaryColumn()
    email: string;

    @Column({ name: 'is_room_owner' })
    isRoomOwner: boolean;

    @Column('timestamp without time zone', { name: 'joined_at', nullable: true })
    joinedAt: Date | null;

    @CreateDateColumn({ name: 'created_at' })
    createdAt: Date;

    @ManyToOne(() => Room, room => room.members)
    @JoinColumn({ name: 'room_id' })
    room: Room;
}
@Entity()
export class Room {
    @PrimaryGeneratedColumn({ name: 'room_id' })
    roomId: number;

    @Column()
    name!: string;

    @Column()
    permanent!: boolean;

    @Column()
    active!: boolean;

    @CreateDateColumn({ name: 'created_at' })
    createdAt: Date;

    @UpdateDateColumn({ name: 'updated_at' })
    updatedAt: Date;

    @OneToMany(() => Member, member => member.room, { cascade: true })
    members: Member[];
}

我想通过会员的电子邮件获取房间并过滤它们是否处于活动状态。 基本上在sql中它会是这样的:

select "room".*, "member".* from room "room"
inner join member "member" on "member".roomId = "room".roomId
where "room".active = :active and "member".email = :email;

它应该包括成员。

我已经习惯了 typeorm,所以非常感谢您的帮助!

【问题讨论】:

  • 您想使用查询生成器生成查询还是更喜欢使用标准 CRUD API?
  • 我不知道.. 最好的方法是什么?从我在文档中看到的内容来看,我可能会使用 QueryBuilder

标签: node.js typescript postgresql inner-join typeorm


【解决方案1】:

可以使用查询构建器构造查询,如下所示 -

  async getRoomsByMember(active: boolean, email: string): Promise<any[]> {
      return await getRepository(Room)
      .createQueryBuilder('room')
      .innerJoinAndSelect('room.member', 'member')
      .where("room.active = :active", {active: active})
      .andWhere("member.email = :email", { email: email })
      .getMany();
  }

【讨论】:

  • 非常感谢!我只需要从“room.email”更改为“member.email”。
  • 很高兴,按照要求进行了更改!
猜你喜欢
  • 2021-04-08
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多