typeorm - 如何根据 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
我究竟做错了什么。我应该怎么做才能让这个查询工作?
解决方案
您需要为所有实体添加主键。从文档:
每个实体必须至少有一个主键列。这是一项要求,您无法避免。要使列成为主键,您需要使用 @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'],
});
推荐阅读
- json - jq 在管道输出时打印帮助
- excel - Excel 2016 错误?
- angularjs - 验证 ng-repeat 表中的选择选项
- python - 使用保存的 scikit learn 模型查看模型中的类
- angular - 在角度 4 中单击单选按钮时如何禁用文本字段
- javascript - 图像未在 codeigniter 项目的实时服务器中上传,它给出 404 和 500 错误
- cmake - 如何将 cmake 变量设置为目标的 URL
- javascript - 图像重影效果
- extjs - 修改 ExtNet 中的 GridFilters
- c - inotify_add_watch 是否按升序返回监视描述符?