Así es como mis dos modelos están conectados:
DebitInvoice.hasMany(DebitInvoiceProduct, { onDelete: 'CASCADE', onUpdate: 'CASCADE', foreignKey: 'invoice_serial' }); DebitInvoiceProduct.belongsTo(DebitInvoice,{ foreignKey: 'serial' }); Estoy tratando de actualizar DebitInvoice y, al hacerlo, también necesito eliminar las filas anteriores de DebitInvoiceProduct y agregar otras nuevas. Es por eso que estoy usando onUpdate: 'CASCADE' . Estoy intentando con este código:
const result = await DebitInvoice.update({ invoice_for: 'data', invoice_date: 'data', /* other fields */ DebitInvoiceProducts: productList, },{ where: {serial: 'data'} }, include: [DebitInvoiceProduct] ); Puedo actualizar los campos de DebitInvoice pero no sucede nada en DebitInvoiceProduct
¿Dónde estoy haciendo mal o qué debo hacer para obtener lo que necesito?
la update no tiene la opción de include , por lo que debe llamar a setDebitInvoiceProducts para cada instancia del modelo DebitInvoice o llamar a destroy y create en DebitInvoiceProducts :
const invoices = await DebitInvoice.findAll({ where: {serial: 'data'} }); for (const invoice of invoices) { const invoiceProducts = productList.filter(x => <here are conditions to get product list for a certain invoice>) await invoice.setDebitInvoiceProducts(invoiceProducts) }O
const invoices = await DebitInvoice.findAll({ where: {serial: 'data'} }); await DebitInvoiceProducts.destroy({ where: { invoiceId: { [Op.in]: invoices.map(x => x.id) } } }) for (const invoice of invoices) { await DebitInvoiceProducts.bulkCreate(productList.map(x => ({ productId: x.id, invoiceId: invoice.id }))) }