sequelize级联删除

环境

node.js+sequelize+mysql

业务背景

mysql数据库中,有两个表已经建立了外键关系.
这个时候我想删除主表上的数据
但是sequelize提供的destroy方法不行

表结构

  • 班主任表:master(id,name)
  • 学生表:student(id,master_id,name)

问题

通过Teacher.destroy({where: {id: 2})删除的时候,会报错.因为受到外键约束..没办法删除

sequelize有内置的级联删除么?
或者用 query方法,怎么写sql代码呢?

阅读 8.5k
2 个回答
新手上路,请多包涵

我使用的方式 获取实例和关联的实例执行删除

也许是这样
teacher = Teacher.findById(2)
students = teacher.getStudents()
for (let student of students) { student.destory() }
teacher.destory()

这是有效的。刚刚学习。也许还有更好的方式 :)

sequelize.define(name, { attributes }, {
  hooks: {
    beforeDestroy: function () {
      //在这里能做你爱做的事情
    },
    beforeValidate: [
      function () {},
      function() {} // Or an array of several
    ]
  }
})

还有,看到belongsTo 的参数有:

  • options.hooks,
  • options.as,
  • options.foreignKey,
  • options.targetKey,
  • options.onDelete:看一下这个能不能帮到你
  • options.onUpdate,
  • options.constraints:看一下这个能不能帮到你
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题