Nest JS TypeORM Post Request для отношения типа «есть много через» - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь реализовать отношение «многие ко многим» с настраиваемым полем в точности , как показано на рисунке . Мои данные отличаются от примера, который он приводит, однако структура отношений идентична. Я могу успешно создать отношения, но у меня возникла проблема, когда внешний ключ для продукта (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.

Это console.log из 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 }
  ]
}

Однако оператор вставки для shipmentProducts опускает product_id и настаивает на значении по умолчанию. Почему? Как мне это исправить?

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

1 Ответ

0 голосов
/ 02 апреля 2020

Оказывается, мне нужно было отправить хотя бы частичный объект product в моем почтовом запросе, а не просто product_id. Так что, похоже, это сработало. Проблема была со стороны клиента, а не с Nest JS или TypeORM.

shipmentProducts: [
  { product: { id:1966 }, qty: 12, pick_up: false }
  { product: { id:1845 }, qty: 20, pick_up: false }
]
...