我使用 PostgreSQL。我有三个实体:产品、仓库和 ProductOnWarehouse。 Product 描述产品、其价格和名称,Warehouse 描述仓库、其坐标和名称,ProductOnWarehouse 描述特定仓库中的特定产品,包括该仓库特有的价格和数量。 它们具有以下形式:
//Product.ts
import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from "typeorm"
import ProductOnWarehouse from "./ProductOnWarehouse"
@Entity({ name: "Product" })
export default class Product {
@PrimaryGeneratedColumn()
id: number
@Column({ type: "varchar", length: "80" })
name: string
@Column()
price: number
@OneToMany(
() => ProductOnWarehouse,
(productOnWarehouse) => productOnWarehouse.product
)
productOnWarehouses: ProductOnWarehouse[]
}
//Warehouse.ts
import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from "typeorm"
import ProductOnWarehouse from "./ProductOnWarehouse"
@Entity({ name: "Warehouse" })
export default class Warehouse {
@PrimaryGeneratedColumn()
id: number
@Column({ type: "varchar", length: "80" })
name: string
@Column("real")
lat: number
@Column("real")
lon: number
@OneToMany(
() => ProductOnWarehouse,
(productOnWarehouse) => productOnWarehouse.warehouse
)
productOnWarehouses: ProductOnWarehouse[]
}
//ProductOnWarehouse.ts
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne, JoinColumn } from "typeorm"
import Product from "./Product.entity"
import Warehouse from "./Warehouse.entity"
@Entity({ name: "ProductOnWarehouse" })
export default class ProductOnWarehouse {
@PrimaryGeneratedColumn()
id: number
@ManyToOne(() => Product, (product) => product.productOnWarehouses)
@JoinColumn({ name: "productId" })
product: Product
@ManyToOne(() => Warehouse, (warehouse) => warehouse.productOnWarehouses)
@JoinColumn({ name: "warehouseId" })
warehouse: Warehouse
@Column()
price: number
@Column()
amount: number
}
当我想在 ProductOnWarehouse 表中创建或查找条目时,我发现 where 条件不需要 id,而是需要 Product 和 Warehouse 类的实例:
this.storedProductsRepository.findOneBy({product: /**requires a Product instance!*/, warehouse: /**requires a Warehouse instance!*/})
情况与创建新的 ProductOnWarehouse 类似。我不能使用 id,还是必须事先获取 Product 和 Warehouse 实例?
我找到了一个解决方案 - 负载关系:
var position = await this.products.findOne({
relations: {
product: true,
warehouse: true
},
where: {
product: {
id: data.productId
},
warehouse: {
id: warehouseId
}
}
})