Node.js sequelize.js N:M通过关系删除级联

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

我正在使用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::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)
部分就足够了