TypeORM使用repository.createQueryBuilder()而不是repository.find()来加载与实体相关的实体

时间:2018-09-07 21:54:19

标签: typeorm

我有一个实体“ Transaction”,该实体有一个相关的实体“ Customer”。 我想加载与交易相关的客户。

它是这样的:

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 个答案:

答案 0 :(得分:0)

经过大量测试,我发现加载关系很简单,但是我必须使用leftJoinAndSelect()函数。

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