【问题标题】:Sequelize - Where do I have to put "onDelete" optionSequelize - 我必须在哪里放置“onDelete”选项
【发布时间】: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


    【解决方案1】:

    您确定您没有在 permission_group 模型之前定义您的 permissions 模型吗?我认为问题来自这里..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 2014-07-06
      • 2019-10-04
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      相关资源
      最近更新 更多