【发布时间】:2021-09-29 21:24:59
【问题描述】:
我目前在 nodeJS/Express API 中使用 Sequelize 6.5.1,我想在模型之间建立一些关联,因为我知道我目前没有使用 sequelize 迁移功能
我有 3 个模型:Role、Permission_group、Permission。
- 一个角色有很多 Permission_group /一个 Permission_group 属于一个角色
- permission_group 模型应该在角色删除时删除
- 一个 Permission_group 有很多 Permissions / 一个 Permission 属于一个 Permission_group
- Permission 模型应该在 Permission_groups 删除时删除
这是我为第一个关联所做的:
Role.hasMany(this.sequelize.models.permission_groups, {
foreignKey: "role_id",
onDelete: "CASCADE",
});
PermissionGroup.belongsTo(this.sequelize.models.roles, {
foreignKey: "role_id",
});
我可以在 postgres 数据库中看到:
Foreign-key constraints:
"permission_groups_role_id_fkey" FOREIGN KEY (role_id) REFERENCES roles(_id) ON UPDATE CASCADE ON DELETE CASCADE
这是我为第二个协会所做的:
PermissionGroup.hasMany(this.sequelize.models.permissions, {
foreignKey: "permission_group_id",
onDelete: "CASCADE",
});
Permission.belongsTo(this.sequelize.models.permission_groups, {
foreignKey: "permission_group_id",
});
正如您所见,两个关联的工作方式和定义方式相同,但这是我从第二个关联中得到的:
Foreign-key constraints:
"permissions_permission_group_id_fkey" FOREIGN KEY (permission_group_id) REFERENCES permission_groups(_id) ON UPDATE CASCADE ON DELETE SET NULL
然后我尝试以相反的方式定义关联:
PermissionGroup.hasMany(this.sequelize.models.permissions, {
foreignKey: "permission_group_id",
});
Permission.belongsTo(this.sequelize.models.permission_groups, {
foreignKey: "permission_group_id",
onDelete: "CASCADE",
});
在这里我得到了预期的行为:
Foreign-key constraints:
"permissions_permission_group_id_fkey" FOREIGN KEY (permission_group_id) REFERENCES permission_groups(_id) ON UPDATE CASCADE ON DELETE CASCADE
一切都是这样,但我不知道为什么。我想了解真正的 onDelete 策略,并在我的所有代码中以相同的方式实现它。
【问题讨论】:
标签: javascript sql node.js postgresql sequelize.js