Sequelize drop table in wrong order

时光毁灭记忆、已成空白 提交于 2019-12-05 02:51:55

Same answer as Guest but without external requirements.

db.query('SET FOREIGN_KEY_CHECKS = 0')
.then(function(){
    return db.sync({ force: true });
})
.then(function(){
    return db.query('SET FOREIGN_KEY_CHECKS = 1')
})
.then(function(){
    console.log('Database synchronised.');
}, function(err){
    console.log(err);
});

Disable foreign key checks before doing sequelize.sync({force: true})

For example:

async.series([
  function(callback) {
    sequelize.query("SET FOREIGN_KEY_CHECKS = 0").complete(callback);
  },
  function(callback) {
    sequelize.sync({force: true}).complete(callback);
  },
  function(callback) {
    sequelize.query("SET FOREIGN_KEY_CHECKS = 1").complete(callback);
  }]
, callback);

This worked for me:

sequelize.query('SET FOREIGN_KEY_CHECKS = 0').success(function() {
    sequelize
        .sync({
            force: true
        }).success(function() {
            sequelize.query('SET FOREIGN_KEY_CHECKS = 1').success(function() {
                console.log('Database synchronised.');
            });
        }).error(function(err) {
            console.log(err);
        });;
}).error(function(ee) {
    console.log(err);
});

This worked for my models and relationship.

/* the models in the array are declared on the basis of relationships */
var models = [
    'User',
    'State',
    'Party',
    'Politician',
    'Constituency',
    'Award',
    'Comment',
    'Favorite',
    'Rating'


];

models.forEach(function(model) {
    //need to drop things to make sure the order is maintained while droping tables...
    module.exports[model] = sequelize.import(__dirname + '/' + model);
});

 /*** setup relationships ***/
 (function(m) {
    m.Award.belongsTo(m.Politician, {foreignKey: 'award_politician_id',
                                     as: 'politician_id',foreignKeyConstraint:true});
    m.Politician.hasMany(m.Award, {foreignKey: 'award_politician_id',foreignKeyConstraint:true});


    m.Comment.belongsTo(m.User, {foreignKey: 'comment_user_id',
                                 as: 'user_id',foreignKeyConstraint:true});
    m.Comment.belongsTo(m.Politician, {foreignKey: 'comment_politician_id',
                                       foreignKeyConstraint:true});
    m.Politician.hasMany(m.Comment, {foreignKey: 'comment_politician_id',
                                     foreignKeyConstraint:true});
    m.User.hasMany(m.Comment, {foreignKey: 'comment_user_id',
                                foreignKeyConstraint:true});

    m.Favorite.belongsTo(m.User, {foreignKey: 'favorite_user_id',
                                  as: 'user_id',foreignKeyConstraint:true});
    m.Favorite.belongsTo(m.Politician, {foreignKey: 'favorite_politician_id',
                                        as: 'politician_id',foreignKeyConstraint:true});
    m.Politician.hasMany(m.Favorite,{foreignKey: 'favorite_politician_id',
                                    foreignKeyConstraint:true});
    m.User.hasMany(m.Favorite, {foreignKey: 'favorite_user_id',
                                foreignKeyConstraint:true});

    m.Rating.belongsTo(m.User, {foreignKey: 'rating_user_id',
                                as: 'user_id',foreignKeyConstraint:true});
    m.Rating.belongsTo(m.Politician, {foreignKey: 'rating_politician_id',
                                      as: 'user_id',foreignKeyConstraint:true});
    m.Politician.hasMany(m.Rating, {foreignKey: 'rating_politician_id',
                                    foreignKeyConstraint:true}
                        );
    m.User.hasMany(m.Rating, {foreignKey: 'rating_user_id',
            foreignKeyConstraint:true}
    );


    m.Constituency.belongsTo(m.State, {foreignKey: 'constituency_state_id',
                                       as: 'state_id',foreignKeyConstraint:true});
    m.State.hasMany(m.Constituency,{foreignKey: 'constituency_state_id', foreignKeyConstraint:true});

    m.Politician.belongsTo(m.Party, { foreignKey: 'politician_party_id',
                                      as: 'party_id',
                                      foreignKeyConstraint:true});
    m.Party.hasMany(m.Politician, {foreignKey: 'politician_party_id', foreignKeyConstraint:true});
//  m.User.drop();
//
//  sequelize.sync();


})(module.exports);
/** drop existing relationships manually in reverse order**/
models.reverse().forEach(function(model) {

    sequelize.import(__dirname + '/' + model).drop().success(function(){
     console.log("success model:" + model);

    }).error(function(error){
      console.log("model:" + model + " error:" + error);
    });
});
/** sync **/
sequelize.sync();
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!