Reputation: 3209
I am using Sequelize.js v1.7.9. With Express.js 4
I have the following relationships:
User hasMany UserRoles
User hasMany Roles through UserRoles
UserRoles belongsTo user
UserRoles belongsTo role
Role hasMany UserRoles
Role hasMany Users through UserRoles
In Rails, we can simply say dependent: :destroy, and when either User
or Role
are deleted, the related UserRole
rows are destroyed as well, however this is not working with Sequelize.js.
I am explicitly creating the join table with migrations, I've set the onDelete: 'CASCADE' on the join tables. But it is not behaving like it is supposed to.
TL;DR, How to get delete CASCADE to work like Rails ActiveRecord dependent: :destroy
My code is as of the following:
user.js:
module.exports = function (sequelize, DataTypes) {
var user = sequelize.define('user',
{
name: DataTypes.STRING,
},
{
classMethods: {
associate: function (models) {
user.hasMany(models.role, {through: models.userRole})
user.hasMany(models.userRole, {onDelete: 'CASCADE', hooks: true})
}
}
}
)
return user
}
role.js:
module.exports = function (sequelize, DataTypes) {
var role = sequelize.define('role',
{
name: DataTypes.STRING,
},
{
classMethods: {
associate: function (models) {
role.hasMany(models.userRole, {onDelete: 'CASCADE', hooks: true})
role.hasMany(models.user, {through: models.userRole})
}
}
}
)
return role
}
userRole.js:
module.exports = function (sequelize, DataTypes) {
var userRole = sequelize.define('userRole',
{
userId: DataTypes.INTEGER,
roleId: DataTypes.INTEGER,
},
{
classMethods: {
associate: function (models) {
userRole.belongsTo(models.user)
userRole.belongsTo(models.role)
}
}
}
)
return userRole
}
Thanks
Upvotes: 3
Views: 2565
Reputation: 28798
Unfortunately n:m cascades do not work properly in 1.7. They are added by default in 2.0
Upvotes: 3