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

标签 typeorm

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

它的工作原理如下:

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>;
    ...
}

如何使用 CreateQueryBuilder 命令将 Transaction Customer 加载到 Transaction 对象上?

最佳答案

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

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

关于TypeORM使用repository.createQueryBuilder()而不是repository.find()加载相关实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52230044/

相关文章:

database - 如何在端到端 (e2e) 测试中模拟 nest typeorm 数据库模块?

mysql - NestJS/TypeORM。 TypeORM 不更新数据库中的实体,而是使用旧的缓存实体

node.js - 为什么 typeorm 需要 "reflect metadata"

node.js - 我可以让 postgres 使用 typeorm 为成对的对象自动生成 id 吗?

typescript - 如何在 typeorm 中组合 3 列,postgres 是唯一的?

foreign-keys - TypeORM 为什么我的关系列未定义?外键未定义

mysql - TypeOrm ViewEntity 查询不正确

typeorm - 为一对一关系创建主键

foreign-keys - TypeORM 关系 : Only IDs instead of whole instances

postgresql - TypeORM:在 PostgreSQL 中自动生成 UUID