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

如何在TypeORM中基于相关实体属性查询实体?

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

    我有一个实体 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 财产

    我做错什么了。我该怎么做才能使这个查询正常工作?

    1 回复  |  直到 7 年前
        1
  •  -1
  •   Clément Prévost    7 年前

    您需要向所有实体添加主键。 From the doc :

    必须 至少有一个主键列。这是一个 要求和 你不能回避 . 要使列成为主键, 您需要使用@PrimaryColumn decorator。

    假设您更新了 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'],
    });