【问题标题】:Sequelize onDelete not working续集 onDelete 不起作用
【发布时间】:2014-07-01 07:08:37
【问题描述】:

我在两个模型之间有如下定义的关联:

对于联系人模型(在单独的文件中)

classMethods: {
      associate: function (models){
         Contact.belongsTo(models.User)
      }
}

对于用户(在单独的文件中)

classMethods: {
     associate: function (models){
        User.hasMany(models.Contact, {onDelete: 'CASCADE'})
     }
}

问题是当删除用户时,与用户相关的联系人不会删除任何关于我做错了什么的建议会有帮助吗?

提前致谢

【问题讨论】:

    标签: javascript node.js associations has-many sequelize.js


    【解决方案1】:

    我认为你需要反过来定义它。

    Contact.belongsTo(models.Users, {
        foreignKeyConstraint: true
        , onDelete: 'cascade'
    })
    

    【讨论】:

    • 谢谢,这对我有用。该文档在某种程度上具有误导性。在文档中, belongsTo 没有 onDelete='CASCADE' 选项,只有 hasMany 有。真的应该是其他方式。
    • 这种方式适用于onDelete: 'cascade' 吗? documentation 仅显示带有 hasMany 函数的 cascade 选项。我有点困惑。
    • 我必须按照文档(现在)进行操作。 User.hasOne(Profile, {onDelete: 'cascade', hooks:true})
    • 我必须按照这里的评论(添加到 belongsTo),但还必须删除在其他模型的定义中使用hasMany。然后我得到了 onDelete 级联。
    【解决方案2】:

    将关联更新为 User.hasMany(models.Contact, { onDelete: 'cascade', hooks: true }) 允许关联之间的钩子触发以启用 onDelete 级联。改编自 sequelize docs

    但是,添加 hooks: true 明确告诉 Sequelize 优化不是您关心的问题,将在 关联的对象并一一销毁每个实例,以便 能够使用正确的参数调用钩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-25
      • 2018-08-29
      • 1970-01-01
      • 2014-06-01
      • 2018-09-23
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多