首页 > 解决方案 > 如何根据 TypeORM 中的相关实体属性查询实体?

问题描述

我有一个实体Transaction和一个实体Integration

@Entity()
export default class Transaction {

    @PrimaryGeneratedColumn()
    public id_trans?: number;

    @OneToOne(type => Integration, i => i.transaction, { nullable: true })
    public integration?: Integration;
}

@Entity()
export default class Integration {

    @PrimaryGeneratedColumn()
    public id_cust?: number;

    @OneToOne(type => Transaction, t => t.integration)
    @JoinColumn({ referencedColumnName: 'id_trans', name: 'int_id_module' })
    public transaction?: Transaction;
}

我尝试使用集成属性作为过滤器来查询事务。

const id_api = 10;
const transaction = await repository.find({
        where: { integration: { int_id_api: id_api} },
        relations: ['integration', 'customer'],
    });

但它会返回整个事务表,即使它与属性integration.int_id_api不同id_api

我究竟做错了什么。我应该怎么做才能让这个查询工作?

标签: typeorm

解决方案


您需要为所有实体添加主键。从文档

每个实体必须至少有一个主键列。这是一项要求,您无法避免。要使列成为主键,您需要使用 @PrimaryColumn 装饰器。

假设您Integration像这样更新实体

@Entity()
export default class Integration {

    @PrimaryColumn()
    public id_inte: number;

    @OneToOne(type => Transaction, t => t.integration)
    @JoinColumn({ referencedColumnName: 'id_trans', name: 'int_id_module' })
    public transaction?: Transaction;
}

你应该能够找到这样的交易

const transaction = await repository.find({
    where: { integration: { id_inte: some_id } },
    relations: ['integration', 'customer'],
});

推荐阅读