当前位置: 首页 > 知识库问答 >
问题:

对的NestJS TypeORM Post请求具有多个直通类型关系

仲孙铭
2023-03-14

我正试图实现与自定义字段的多对多关系,就像下面演示的那样。我的数据与他给出的例子不同,但是关系的结构是相同的。我能够成功地创建关系,但我有一个问题,即产品(product_id)的外键为空,即使客户端正在为该字段发送数据。出于某种原因,TypeORM正在删除它并输入空值。

以下是连接表的结构:

@Entity()
export class ShipmentProduct {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  qty: number;

  @Column()
  pick_up: boolean;

  @ManyToOne(type => Shipment, shipment => shipment.shipmentProducts)
  @JoinColumn({ name: 'shipment_id' })
  shipment: Shipment;

  @ManyToOne(type => Product, product => product.shipmentProducts)
  @JoinColumn({ name: 'product_id' })
  product: Product;

}

我的服务通过以下功能提交数据:

 async create(shipmentData: CreateShipmentDto): Promise<Shipment> {
   const shipment = new Shipment();
   shipment.bill_of_lading = shipmentData.bill_of_lading;
   shipment.trailer_number = shipmentData.trailer_number;
   shipment.ship_date = shipmentData.ship_date;
   shipment.delivery_date = shipmentData.delivery_date;
   shipment.carrier = shipmentData.carrier;
   shipment.release_code = shipmentData.release_code;
   shipment.payment_date = shipmentData.payment_date;
   shipment.comments = shipmentData.comments;
   shipment.client = await this.clientsRepository.findOne(shipmentData.client_id);
   shipment.shipmentProducts = shipmentData.shipmentProducts;

   return await this.shipmentsRepository.save(shipment);
 }

提交表单时,装运数据将与shipmentProducts一起成功保存,但即使shipmentData包含product_id的值,也会删除product_id。

这是一个控制台。shipmentData日志

{
  client_id: 1,
  bill_of_lading: '12',
  trailer_number: '21',
  ship_date: '2020-04-02T04:00:00.000Z',
  delivery_date: '',
  carrier: '21',
  release_code: '21',
  fuel_surcharge: '21',
  payment_date: '',
  comments: '',
  shipmentProducts: [
    { product_id: 1966, qty: '12', pick_up: false },
    { product_id: 1966, qty: '12', pick_up: false }
  ]
}

但是,shimentProducts的插入语句省略了product_id,并坚持使用缺省值。为什么啊?我要怎么修?

INSERT INTO `shipment_product`(`id`, `qty`, `pick_up`, `shipment_id`, `product_id`) VALUES (DEFAULT, ?, ?, ?, DEFAULT) -- PARAMETERS: ["12",0,10]

共有2个答案

公羊宗清
2023-03-14

这是很常见的问题。

有用的解决方法是使用:

js prettyprint-override">@Entity()
export class ShipmentProduct {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(type => Product, product => product.shipmentProducts)
  @JoinColumn({ name: 'product_id' })
  product: Product;

  @Column({name: 'product_id'})
  productId: Product['id'];
}

所以您可以直接传递productId

夏景胜
2023-03-14

事实证明,我需要在post请求中至少发送一部分产品对象,而不仅仅是产品id。所以这似乎起到了作用。问题出在客户端,而不是NestJS或TypeORM。

shipmentProducts: [
  { product: { id:1966 }, qty: 12, pick_up: false }
  { product: { id:1845 }, qty: 20, pick_up: false }
]
 类似资料:
  • 问题内容: 我使用Python Requests库下载一个大文件,例如: 大文件的下载速度为每秒+-30 Kb,这有点慢。与bigfile服务器的每个连接都受到限制,因此我想建立多个连接。 有没有一种方法可以同时建立多个连接来下载一个文件? 问题答案: 您可以使用HTTP标头仅获取文件的一部分(此处已涵盖python)。 只需启动几个线程,并获取每个线程的不同范围,就可以完成;) 还要注意,并非每

  • 问题内容: 我想拥有一个Class对象,但是我想强迫它代表的任何类扩展A类并实现接口B。 我可以: 要么: 但我不能两者都做。有没有办法做到这一点? 问题答案: 实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样: 请参见sun.com上的泛型教程,特别是页面底部的“ 绑定类型参数”部分。实际上,如果需要,你可以列出多个接口,并& InterfaceName根

  • 如何创建具有整数和字符串输入类型的?如果我创建一个: 这将是一个类型。如果我将其创建为: 这将是类型。我如何创建一个,它可以接受整数和字符串输入类型?谢谢。

  • 问题内容: 有一个实体类“ A”。A类可能具有相同类型“ A”的子级。如果“ A”是孩子,则也应保留它的父母。 这可能吗?如果是这样,我应该如何在Entity类中映射关系?[“ A”有一个id列。] 问题答案: 是的,这是可能的。这是标准双向@ManyToOne/ @OneToMany关系的特例。之所以特别是因为关系两端的实体都是相同的。JPA 2.0规范的第2.10.2节详细介绍了一般情况。 这

  • 问题内容: 这是hrert的问题Generic类与其他类型的Collectiongetter的后续文章。如果您可以为我的问题找到更好的标题,请随时对其进行编辑: 下面的代码包含一个具有返回类型方法的通用类和具有返回类型方法的另一个方法,显然与。 现在,如果我实例化一个原始数据(我永远不会做,所以这个问题更多是一个理论问题,以帮助理解正在发生的事情),那么在增强的for循环中调用该方法将不起作用,因

  • 我发送一个POST请求,从一家运输公司生成AWB。为了做到这一点,我必须通过SOAP API POST请求发布多个数据条目。下面的XML是类似的,这是必需的(我已经简化了,否则它要求超过30个参数) 我是SOAP新手,请帮助我朝着正确的方向前进,我甚至非常感谢上面的XML代码,因为它有助于更好地理解。