如何使用查询构建器过滤一对多关系
How to filter one-to-many relations with query builder
我有
@Entity('procedures')
export class ProcedureEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToMany(type => MediaFileEntity, media => media.procedure, {
cascade: true
})
files: MediaFileEntity[];
};
和
@Entity('media_files')
export class MediaFileEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ nullable: true })
deletedAt: Date;
@ManyToOne(type => ProcedureEntity, procedure => procedure.files)
procedure: ProcedureEntity;
};
有人知道如何创建查询生成器以便获得所有程序,但媒体文件具有 deletedAt
NULL 吗?
我正在努力
const procedures = await this.procedureRepository
.createQueryBuilder("procedure")
.leftJoinAndSelect("procedure.doctor", "doctor")
.leftJoinAndSelect("procedure.patient", "patient")
.innerJoin('procedure.files', 'mediaFile', 'mediaFile.deletedAt IS NULL')
.where("(patient.id = :id OR doctor.id = :doctorId)", { id: user.id, doctorId: user.id })
.andWhere('procedure.deletedAt IS NULL')
.getMany();
但我得到 Cannot find name 'where'
。这很奇怪,因为 this.procedureRepository
.createQueryBuilder("procedure")
也是 SelectQueryBuilder<ProcedureEntity>
并且 this.procedureRepository
.createQueryBuilder("procedure")
.leftJoinAndSelect("procedure.doctor", "doctor")
.leftJoinAndSelect("procedure.patient", "patient")
.innerJoin('procedure.files', 'mediaFile', 'mediaFile.deletedAt IS NULL');
也是
提前致谢!
编辑:有趣的是,我已经有了答案。但我还是要把它留在这里,为了后代
您有语法错误。 innerJoin
后有分号。这是错误的原因吗?
我有
@Entity('procedures')
export class ProcedureEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToMany(type => MediaFileEntity, media => media.procedure, {
cascade: true
})
files: MediaFileEntity[];
};
和
@Entity('media_files')
export class MediaFileEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ nullable: true })
deletedAt: Date;
@ManyToOne(type => ProcedureEntity, procedure => procedure.files)
procedure: ProcedureEntity;
};
有人知道如何创建查询生成器以便获得所有程序,但媒体文件具有 deletedAt
NULL 吗?
我正在努力
const procedures = await this.procedureRepository
.createQueryBuilder("procedure")
.leftJoinAndSelect("procedure.doctor", "doctor")
.leftJoinAndSelect("procedure.patient", "patient")
.innerJoin('procedure.files', 'mediaFile', 'mediaFile.deletedAt IS NULL')
.where("(patient.id = :id OR doctor.id = :doctorId)", { id: user.id, doctorId: user.id })
.andWhere('procedure.deletedAt IS NULL')
.getMany();
但我得到 Cannot find name 'where'
。这很奇怪,因为 this.procedureRepository
.createQueryBuilder("procedure")
也是 SelectQueryBuilder<ProcedureEntity>
并且 this.procedureRepository
.createQueryBuilder("procedure")
.leftJoinAndSelect("procedure.doctor", "doctor")
.leftJoinAndSelect("procedure.patient", "patient")
.innerJoin('procedure.files', 'mediaFile', 'mediaFile.deletedAt IS NULL');
提前致谢!
编辑:有趣的是,我已经有了答案。但我还是要把它留在这里,为了后代
您有语法错误。 innerJoin
后有分号。这是错误的原因吗?