【问题标题】:sequelize.js N:M through relationships, delete cascadesequelize.js N:M 通过关系,删除级联
【发布时间】:2014-09-16 21:04:20
【问题描述】:

我正在使用 Sequelize.js v1.7.9。使用 Express.js 4

我有以下关系:

User hasMany UserRoles
User hasMany Roles through UserRoles

UserRoles belongsTo user
UserRoles belongsTo role

Role hasMany UserRoles
Role hasMany Users through UserRoles

在 Rails 中,我们可以简单地说依赖::destroy,当 UserRole 被删除时,相关的 UserRole 行也会被销毁,但是这不适用于 Sequelize.js。

我正在使用迁移显式创建连接表,我已经在连接表上设置了 onDelete: 'CASCADE'。但它的行为不像它应该的那样。

TL;DR,如何让删除 CASCADE 像 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
}

谢谢

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    很遗憾,n:m 级联在 1.7 中无法正常工作。它们在 2.0 中默认添加

    【讨论】:

    • 能举个2.0的例子吗?
    • 您发布的代码在 2.0 中开箱即用,您无需添加任何内容即可获得级联约束。除非您要直接查询 userRole 表,否则您不需要 role.hasMany(models.userRole, {onDelete: 'CASCADE', hooks: true})userRole.belongsTo(models.user)through 部分就足够了
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 2017-11-17
    • 2014-06-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多