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

Dan*_*tos 7 typeorm

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

它是这样工作的:

Repository.find({ relations: ['customer'] });
Run Code Online (Sandbox Code Playgroud)

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

    Rrepository.createQueryBuilder('t')
        .leftJoin( /*...*/  )
        .where( /*...*/ })
        .getOne();
Run Code Online (Sandbox Code Playgroud)

这将返回与null客户的交易。

我的实体是:

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

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

如何Transaction使用CreateQueryBuilder命令将交易客户加载到对象上?

Dan*_*tos 19

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

context.createQueryBuilder('t')
    .leftJoinAndSelect("t.customer", "customer")
    .leftJoinAndSelect(/* other joins */)
    .where(/* custom where */)
    .getOne();
Run Code Online (Sandbox Code Playgroud)