Node.js sequelize.js N:M通过关系删除级联
我正在使用Sequelize.jsv1.7.9。使用Express.js4 我有以下关系:Node.js sequelize.js N:M通过关系删除级联,node.js,express,sequelize.js,Node.js,Express,Sequelize.js,我正在使用Sequelize.jsv1.7.9。使用Express.js4 我有以下关系: User hasMany UserRoles User hasMany Roles through UserRoles UserRoles belongsTo user UserRoles belongsTo role Role hasMany UserRoles Role hasMany Users through UserRoles 在Rails中,我们可以简单地说dependent::dest
User hasMany UserRoles
User hasMany Roles through UserRoles
UserRoles belongsTo user
UserRoles belongsTo role
Role hasMany UserRoles
Role hasMany Users through UserRoles
在Rails中,我们可以简单地说dependent::destroy,当User
或Role
被删除时,相关的UserRole
行也会被销毁,但是这不适用于Sequelize.js
我通过迁移显式地创建联接表,在联接表上设置了onDelete:“CASCADE”。但它的行为并不像人们想象的那样
TL;DR,如何让删除级联像Rails ActiveRecord一样工作dependent::destroy
我的代码如下所示:
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
}
谢谢不幸的是,n:m级联在1.7中不能正常工作。它们是在2.0中默认添加的你能在2.0中给出一个例子吗?你发布的代码在2.0中是现成的,你不需要添加任何东西来获得级联约束。除非您要直接查询userRole表,否则您不需要
role.hasMany(models.userRole,{onDelete:'CASCADE',hooks:true})
或userRole.belongsTo(models.user)
部分就足够了