使用sequelize关联创建具有多个外键的记录

时间:2019-07-15 21:24:48

标签: javascript postgresql typescript sequelize.js

我有一个数据库模型,其中履行要求由采购订单组成。履行请求与一个表是complementmentrequestsLineItems具有一对多关系,采购订单同样与purchaseOrderLineItems具有一对多关系。问题和复杂性在于每个purchaseOrderLineItem记录还引用了complementrequestlineitem。因此,PurchaseOrderLineItem记录具有两个外键:PurchaseOrderID和FulfillmentRequestLineItemID。

我现在使用的方式是,我正在使用关联来很好地获取purchaseOrderId,但是我找不到一种方法来关联fulfillmentRequestLineItemId。我可能会采用完全错误的方法,但会建议一些建议。

我正在尝试在同一笔交易中完成所有这些操作。

阅读文档,尝试将ID简单映射到purchaseOrderLineItem的实例中,但尚未生成fulfillmentRequestLineItem的ID。

const findFulFillmentRequestLineItem = (lineItemsArray: FulfillmentRequestLineItem[], productId: string, product: string) => {
    lineItemsArray.find( lineItem => {return (lineItem.productId === productId || lineItem.product === product)})
}


router.post('/', async (request: Request, response: Response) => {
    try {
        return connection.transaction(async (t) => {
            const fulfillmentRequest = new FulfillmentRequest(request.body, {include: [ 
                    FulfillmentRequestLineItem,
                    {model: PurchaseOrder,
                    include: [PurchaseOrderLineItem]
                    }
                ]
            });
            fulfillmentRequest.purchaseOrder.forEach( purchaseOrder => {
                purchaseOrder.set('status', 'New Order');
                purchaseOrder.purchaseOrderLineItem.forEach( lineItem => {
                    let correspondingFulfillmentRequestLineItem = findFulFillmentRequestLineItem(fulfillmentRequest.FulfillmentRequestLineItem, lineItem.id, lineItem.product)
                    lineItem.set('fulfillmentRequestLineItemId', correspondingFulfillmentRequestLineItem.id)
                })
            })
        });
    }
    catch(error){
        console.log(error);
        response.status(500).json({error: error.toString()})
    }
});

0 个答案:

没有答案