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
Pouvez-vous donner un exemple dans 2.0? – Shamoon
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 –