2014-07-07 138 views
3

我使用Sequelize.js v1.7.9。隨着Express.js 4sequelize.js N:M通過關係,刪除級聯

我有以下關係:

User hasMany UserRoles 
User hasMany Roles through UserRoles 

UserRoles belongsTo user 
UserRoles belongsTo role 

Role hasMany UserRoles 
Role hasMany Users through UserRoles 

在Rails中,我們可以簡單地說,取決於:破壞,並當任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 
} 

作用。 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 
} 

感謝

回答

3

不幸的是N:M級聯不正常在1.7工作。它們默認添加到2.0中

+0

你可以在2.0中給出一個例子嗎? – Shamoon

+0

您發佈的代碼在2.0中是開箱即用的,您無需添加任何內容即可獲得級聯約束。除非你直接查詢userRole表,否則你不需要'role.hasMany(models.userRole,{onDelete:'CASCADE',hooks:true})''或'userRole.belongsTo(models.user)', 「通過」部分就足夠了 –