sequelize-reassociate
A simple abstraction for the Sequelize to reassociate a models associations if it ever were to be destroyed.
What?
Sequelize-reassociate basically moves a models associations to a provided record if the parent model were to be destroyed. For example, if a User
model owns many Comment
s, we can transfer the Comment
s to a Ghost-user (like GitHub does) so the context of the conversation can be preserved. It currently only works for HasMany
associations.
How?
- Download the module:
npm install @awkward/sequelize-reassociate --save
- Require the module:
const reassociate = require('@awkward/sequelize-reassociate');
- Setup the module:
in your
index.js
file (or wherever you initialize Sequelize) just call the function and pass in your initialized sequelize instance. Make sure the models already have been initialized at this point.
db.sequelize = sequelize;
db.Sequelize = Sequelize;
reassociate(db);
- Using the module:
Now to use the module, let the models know where its associations can be moved to using a public method which returns an object:
const User = sequelize.define('User', {
},
{
classMethods: {
associate: function(models) {
User.hasMany(models.Comment);
},
reassociate: function() {
return {
Comments: 1,
};
}
}
}
});
Basically the heart is in the reassociate()
method. The return value should be an object containing the association (either the Model name or the reference when using as
in the association) and the value is the foreign key pointing to the new owner.
License
MIT