【发布时间】:2021-05-18 13:44:40
【问题描述】:
首先,如果我使用错误的术语来描述这个问题,请原谅我。我正在学习。
当我查询公司时,我想包含地址,并且我希望地址包含地址类型。
所以,我想我是在寻求最好的方式来包含一对一的“连同”多对多的结果。
我的桌子(为了说明而稍微消毒):
+------------------+--------------+----------------------------+
| company |
+------------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| name | varchar(255) | |
+------------------+--------------+----------------------------+
+------------------+--------------+----------------------------+
| company_address |
+------------------+--------------+----------------------------+
| company_id | int | |
| address_id | int | |
+------------------+--------------+----------------------------+
+------------------+--------------+----------------------------+
| address |
+------------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| name | varchar(255) | |
| address_type_id | int | |
+------------------+--------------+----------------------------+
+------------------+--------------+----------------------------+
| address_type |
+------------------+--------------+----------------------------+
| id | int | PRIMARY KEY AUTO_INCREMENT |
| name | varchar(255) | |
+------------------+--------------+----------------------------+
当我查询地址时,我可以在我的地址实体中使用以下内容来获取地址类型:
...
@OneToOne(() => AddressType)
@JoinColumn({ name: "address_type_id" })
addressType: AddressType;
...
在地址服务中使用以下关系时:
...
async findOne(id: number): Promise<Address> {
return this.addressesRepository.findOne(id,{ relations: ["addressType"] });
}
...
当我查询公司时,我可以在公司实体中使用以下内容获取地址。但是,它不包括地址类型:
...
@ManyToMany(() => Address)
@JoinTable({
name:"company_address",
joinColumn: {
name: "company_id",
referencedColumnName: "id"
},
inverseJoinColumn: {
name: "address_id",
referencedColumnName: "id"
}
})
addresses: Address[];
...
在公司服务中使用以下关系时:
...
async findOne(id: number): Promise<Company> {
return this.companiesRepository.findOne(id,{ relations: ["addresses"] });
}
...
最初我认为它会从地址的实体定义中“正常工作”。但是,结果中缺少 addressType 列。
【问题讨论】:
标签: typescript nestjs typeorm