Sequelize - 我必须在哪里放置 "onDelete" 选项
Sequelize - Where do I have to put "onDelete" option
我目前正在 nodeJS/Express API 中使用 Sequelize 6.5.1 我想在模型之间建立一些关联,知道我我目前没有使用 sequelize 迁移功能
我有 3 个模型:角色,Permission_group,权限。
- 一个Role有多个Permission_group/一个Permission_group属于一个Role
- permission_group 模型应该删除 角色删除
- 一个Permission_group有很多权限/一个权限属于一个Permission_group
- 在 Permission_group 删除
时应 删除 权限模型
这是我为第一个协会所做的:
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 策略,并在我的所有代码中以相同的方式实现它。
您确定没有在 permission_group 模型之前定义 permissions 模型吗?我认为问题出在这里..
我目前正在 nodeJS/Express API 中使用 Sequelize 6.5.1 我想在模型之间建立一些关联,知道我我目前没有使用 sequelize 迁移功能
我有 3 个模型:角色,Permission_group,权限。
- 一个Role有多个Permission_group/一个Permission_group属于一个Role
- permission_group 模型应该删除 角色删除
- 一个Permission_group有很多权限/一个权限属于一个Permission_group
- 在 Permission_group 删除 时应 删除 权限模型
这是我为第一个协会所做的:
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 策略,并在我的所有代码中以相同的方式实现它。
您确定没有在 permission_group 模型之前定义 permissions 模型吗?我认为问题出在这里..