javascript - Sequelize - 我必须在哪里放置 "onDelete"选项

标签 javascript sql node.js postgresql sequelize.js

我目前在 nodeJS/Express API 中使用 Sequelize 6.5.1 ,我想在模型之间设置一些关联,知道我目前没有使用 sequelize 迁移功能
我有 3 个模型: Angular 色、Permission_group、权限

  • 一个 Angular 色有很多 Permission_group/A Permission_group 属于一个 Angular 色
  • 该permission_group 模型应该是 删除 上的Role 删除

  • A Permission_group 有很多 Permissions/A 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 策略,并在我所有的代码中以相同的方式实现它。

    最佳答案

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

    关于javascript - Sequelize - 我必须在哪里放置 "onDelete"选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68487508/

    相关文章:

    Javascript:如何在没有 jQuery 或 AJAX 的情况下将 JSON 对象作为文件加载?

    node.js - 如何使用 express-session 生成自定义 session ID?

    javascript - 将 Promise 绑定(bind)到函数

    javascript - 使用 dojox.mobile 创建水平 ScrollableView

    javascript - 触发点击链接不会改变位置哈希

    mysql - 没有分组依据的 SQL 计数

    mysql - 表中每一行的并集

    php - 查询后反规范化表

    javascript - 是否可以用漂亮的汤从动态图中提取数据?

    node.js - 如何自定义 Electron 应用程序中的菜单?