如何在 typeorm (postgresql) 中进行 INNER JOIN

How to do INNER JOIN in typeorm (postgresql)

我有这两个实体:

@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,非常感谢您的帮助!

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

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