如何使用查询构建器过滤一对多关系

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 后有分号。这是错误的原因吗?