代码之家  ›  专栏  ›  技术社区  ›  Daniel Santos

使用repository.createQueryBuilder()而不是repository.find()来类型化加载相关实体

  •  0
  • Daniel Santos  · 技术社区  · 7 年前

    我有一个实体“交易”,有一个相关实体“客户”。

    它的工作原理如下:

    Repository.find({ relations: ['customer'] });
    

    但是我想做一个更复杂的查询,所以我使用QueryBuilder

        Rrepository.createQueryBuilder('t')
            .leftJoin( /*...*/  )
            .where( /*...*/ })
            .getOne();
    

    这将返回带有 null 顾客。

    我的实体是:

    @Entity()
    export default class Transaction {
        ...
        @ManyToOne(type => Customer, c => c.transactions, { nullable: true, eager: true })
        public customer?: Customer;
        ...
    }
    

    @Entity()
    export default class Customer {
        ...
        @OneToMany(type => Transaction, t => t.customer)
        @JoinColumn({ name: 'cust_id', referencedColumnName: 'cust_id' })
        public transactions?: Array<Transaction>;
        ...
    }
    

    如何将使用的事务客户加载到 Transaction 对象使用 CreateQueryBuilder

    1 回复  |  直到 7 年前
        1
  •  2
  •   Daniel Santos    7 年前

    经过多次测试,我发现加载关系很简单,但我必须使用 leftJoinAndSelect()

    context.createQueryBuilder('t')
        .leftJoinAndSelect("t.customer", "customer")
        .leftJoinAndSelect(/* other joins */)
        .where(/* custom where */)
        .getOne();