Sequelize.js:ER_ROW_IS_REFERENCED:无法删除或更新父行:外键约束失败

Sha*_*oon 4 sequelize.js

我的代码是:

DB.sequelize.query('SET FOREIGN_KEY_CHECKS = 0').complete(function(err) {
  if (err) {
    return done(err);
  }
  DB.sequelize.drop();
  return DB.sequelize.sync().complete(function(err) {
    if (err) {
      return done(err);
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

我有一些外键限制,但我认为SET FOREIGN_KEY_CHECKS = 0会忽略它,让我放弃.相反,我得到的错误是:ER_ROW_IS_REFERENCED: Cannot delete or update a parent row: a foreign key constraint fails

tre*_*r37 8

对于使用sequelize 3.15.x的任何人,他们都重构了他们的查询方法,以便初始SQL语句之后的任何选项都包含在一个选项对象中.因此答案如下:

DB
    .sequelize
    .query('SET FOREIGN_KEY_CHECKS = 0', {raw: true})
    .then(function(results) {
        DB.sequelize.sync({force: true});
    });
Run Code Online (Sandbox Code Playgroud)


Kin*_*tic 5

请尝试以下方法.

DB
    .sequelize
    .query('SET FOREIGN_KEY_CHECKS = 0', null, {raw: true})
    .success(function(results) {
        DB.sequelize.sync({force: true});
    });
Run Code Online (Sandbox Code Playgroud)

同步的"force:true"选项会将"DROP TABLE IF EXISTS"添加到create语句中,因此这应该实现您尝试使用drop().

它也值得考虑这个答案:Sequelize不会创建外键作为约束.