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中,我們可以簡單地說,取決於:破壞,並當任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
}
作用。 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
}
感謝
你可以在2.0中給出一個例子嗎? – Shamoon
您發佈的代碼在2.0中是開箱即用的,您無需添加任何內容即可獲得級聯約束。除非你直接查詢userRole表,否則你不需要'role.hasMany(models.userRole,{onDelete:'CASCADE',hooks:true})''或'userRole.belongsTo(models.user)', 「通過」部分就足夠了 –