In sequelize it's possible to create a row and all it's association in one go like this:
return Product.create({
title: 'Chair',
User: {
first_name: 'Mick',
last_name: 'Broadstone'
}
}, {
include: [ User ]
});
Is there a equivalent for update? I tried
model.user.update(req.body.user, {where: {id: req.user.user_id}, include: [model.profile]})
But it's only updating user
Doing this for create works
model.user.create(user, {transaction: t, include: [model.profile]})
Creating associations in sequelize is done by calling one of the belongsTo / hasOne / hasMany / belongsToMany functions on a model (the source), and providing another model as the first argument to the function (the target). hasOne - adds a foreign key to the target and singular association mixins to the source.
For example, you can change the foreign key name on the table by adding the foreignKey property: User. hasOne(Invoice, { foreignKey: "invoice_creator", // UserId -> invoice_creator }); You can also change the column used as a reference for the foreign key from the default primary key.
First you have to find model including sub model which you want to update. then you can get reference of sub model to update easily. i am posting an example for your reference. hope it will help.
var updateProfile = { name: "name here" };
var filter = {
where: {
id: parseInt(req.body.id)
},
include: [
{ model: Profile }
]
};
Product.findOne(filter).then(function (product) {
if (product) {
return product.Profile.updateAttributes(updateProfile).then(function (result) {
return result;
});
} else {
throw new Error("no such product type id exist to update");
}
});
If you want to update both models(Product & Profile) at once. One of the approaches can be:
// this is an example of object that can be used for update
let productToUpdate = {
amount: 'new product amount'
Profile: {
name: 'new profile name'
}
};
Product
.findById(productId)
.then((product) => {
if(!product) {
throw new Error(`Product with id ${productId} not found`);
}
product.Profile.set(productToUpdate.Profile, null);
delete productToUpdate.Profile; // We have to delete this object to not reassign values
product.set(productToUpdate);
return sequelize
.transaction((t) => {
return product
.save({transaction: t})
.then((updatedProduct) => updatedProduct.Profile.save());
})
})
.then(() => console.log(`Product & Profile updated!`))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With