首页 > 解决方案 > 如何使用查询生成器过滤一对多关系

问题描述

我有

@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;

};

有谁知道我如何创建一个查询生成器,以便我获得所有程序,但使用具有deletedAtNULL 的媒体文件?

我正在尝试做

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")也是 a SelectQueryBuilder<ProcedureEntity>,所以是this.procedureRepository .createQueryBuilder("procedure") .leftJoinAndSelect("procedure.doctor", "doctor") .leftJoinAndSelect("procedure.patient", "patient") .innerJoin('procedure.files', 'mediaFile', 'mediaFile.deletedAt IS NULL');

提前致谢!

编辑:很有趣,我已经有了答案。但我还是要把它留在这里,为了后代

标签: node.jsquery-buildertypeorm

解决方案


您有语法错误。后面有分号innerJoin。这是错误的原因吗?


推荐阅读