插入时不创建对象,仅在主键上

时间:2020-05-04 10:50:39

标签: typeorm

我有一个实体优惠券,其中包含与Packs表的ManyToOne关系。 因此,当我想在优惠券上执行插入时,我首先基于id执行选择查询以获取Pack对象,然后在实际的优惠券插入查询中使用查询结果。 如何直接基于id插入Coupons表中,因为ManyToOne关系仅使新列具有外键约束来打包id。

Currently, i am doing

repos.productCouponsRepository
.createQueryBuilder()
.insert()
.values([{ coupon_code: code,  product_pack: <Some product_pack object> }])
.execute();

I want something like

repos.productCouponsRepository
.createQueryBuilder()
.insert()
.values([{ coupon_code: code, product_pack: <Some product_pack id> }])
.execute();

Entites

export class ProductPacks {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToMany(type => ProductCoupons, productCoupon => productCoupon.product_pack,{ onDelete: "CASCADE" })
  product_coupons: ProductCoupons[];
}

export class ProductCoupons {

  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(type => ProductPacks, productPack => productPack.product_coupons, { onDelete: "CASCADE", nullable: false })
  product_pack: ProductPacks;
}

1 个答案:

答案 0 :(得分:1)

您需要一个带有外键的关系ID列到ProductPacks表。 将列product_pack_id添加到实体ProductCoupons

export class ProductCoupons {

  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  @RelationId()
  product_pack_id: number;

  @ManyToOne(type => ProductPacks, productPack => productPack.product_coupons, { onDelete: "CASCADE", nullable: false })
  product_pack: ProductPacks;
}

然后将<Some product_pack id>插入product_pack_id

repos.productCouponsRepository
.createQueryBuilder()
.insert()
.values([{ coupon_code: code, product_pack_id: <Some product_pack id> }])
.execute();