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