【问题标题】:Sequelize bulk synchronization does nothingSequelize 批量同步不执行任何操作
【发布时间】:2016-06-12 00:29:09
【问题描述】:

我无法让sequelize.sync() 工作。在每个模型定义上调用 sync() 可以完美地工作,但从 sequelize 实例调用它似乎没有任何作用,就像模型管理器中没有注册模型一样。

考虑以下几点:

function syncAll() {
    console.log('Retrieving exported models...')
    let models = require('./models')
    for(var modelName in models) {
        let model = models[modelName]
        // define() just wraps a regular sequelize.define() call
        // model.define().sync() works!
        model.define()
    }

    console.log('All exported models have been defined! Syncing database...')
    sequelize.sync({
        logging: true
    }).then(function() {
        // The operation completes but no command is executed in the DB
        console.log('Database synchronization complete!')
    }).catch(function(error) {
        console.log("Database synchronization error:\n\t${error}")
    })
}

只是想了解我缺少什么,为什么批量同步对我不起作用?

AFAIK 我只需要在调用 sequelize.sync() 之前定义的所有模型,对吧?!

编辑 1

关于我的环境的一些信息:我在 debian 下使用 node 5.6 和 postgres

编辑 2

发现问题。请参阅已接受答案的结尾...

【问题讨论】:

    标签: node.js typescript sequelize.js


    【解决方案1】:

    来自 sequelize example 的这段代码对我来说很好用:

    var sequelize = new Sequelize(config.database, config.username, config.password, config);
    var db: any = {};
    
    var Task = sequelize.define("Task", {
      title: Sequelize.STRING
    }, {
      classMethods: {
        associate: function(models) {
          Task.belongsTo(models.User, {
            onDelete: "CASCADE",
            foreignKey: {
              allowNull: false
            }
          });
        }
      }
    });
    
    var User = sequelize.define("User", {
      username: Sequelize.STRING
    }, {
      classMethods: {
        associate: function(models) {
          User.hasMany(models.Task);
        }
      }
    });
    
    db.User = User;
    db.Task = Task;
    
    Object.keys(db).forEach(function(modelName) {
      if ("associate" in db[modelName]) {
        db[modelName].associate(db);
      }
    });
    
    sequelize.sync().then(() => {
      // some code here
    });
    

    已通过“sequelize.define(...)”定义模型,然后调用“sequelize.sync()”。

    更新 1

    我正在使用 sqlite:

    var config: any = {
        "dialect": "sqlite",
        "storage": "./db.development.sqlite"
    };
    

    从 OP 更新

    我发现此代码与我的代码之间的唯一区别。由于我的逻辑中的错误sequelize.define()sequelize.sync() 被从不同的sequelize 实例(即不同的连接)调用,并且每个连接都有自己的modelManager,所以显然没有模型可以在第二个连接对象中同步。

    【讨论】:

    • 你用什么来测试的?!我正在使用postgres。我回家后会测试你的代码,谢谢...
    • 我正在使用 sqlite(更新 1)。
    猜你喜欢
    • 2017-09-09
    • 2017-02-17
    • 2019-05-27
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多