如何在 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();
}
我有这两个实体:
@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();
}