2014-07-07 3 views
3

J'utilise Sequelize.js v1.7.9. Avec express.js 4sequelize.js N: M à travers les relations, supprimer cascade

Je les relations suivantes:

User hasMany UserRoles 
User hasMany Roles through UserRoles 

UserRoles belongsTo user 
UserRoles belongsTo role 

Role hasMany UserRoles 
Role hasMany Users through UserRoles 

Dans Rails, nous pouvons simplement dire dépendante:: détruire, et lorsque l'User ou Role sont supprimés, les lignes liées UserRole sont détruits bien, mais cela ne fonctionne pas avec Sequelize.js.

Je crée explicitement la table de jointure avec les migrations, j'ai mis le onDelete: 'CASCADE' sur les tables de jointure. Mais il ne se comporte pas comme il est censé le faire.

TL; DR, Comment obtenir supprimer CASCADE travailler comme Rails ActiveRecord dependent: :destroy

Mon code est aussi des éléments suivants:

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 
} 

rôle. 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 
} 

Merci

Répondre

3

Malheureusement n: cascades m ne fonctionnent pas correctement dans 1.7. Ils sont ajoutés par défaut dans 2.0

+0

Pouvez-vous donner un exemple dans 2.0? – Shamoon

+0

Le code que vous avez publié fonctionne sans problème dans la version 2.0, vous n'avez pas besoin d'ajouter quoi que ce soit pour obtenir des contraintes en cascade. À moins que vous n'ayez à interroger la table userRole directement, vous n'avez pas besoin de 'role.hasMany (models.userRole, {onDelete: 'CASCADE', hooks: true})' ou 'userRole.belongsTo (models.user)' non plus, la partie «à travers» est assez –

Questions connexes