【发布时间】: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,当 User 或 Role 被删除时,相关的 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