链接实体是否会限制搜索和创建新对象的能力?

问题描述 投票:0回答:1

我使用 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 实例?

postgresql nestjs typeorm
1个回答
0
投票

我找到了一个解决方案 - 负载关系:

var position = await this.products.findOne({
        relations: {
            product: true,
            warehouse: true
        },
        where: {
            product: {
                id: data.productId
            },
            warehouse: {
                id: warehouseId
            }
        }
    })
© www.soinside.com 2019 - 2024. All rights reserved.