如何为数据库实现 sequelize 向下迁移功能?

alo*_*ons 3 javascript database database-migration node.js sequelize.js

在 Sequelize.js 中,我创建了一个示例迁移文件:

module.exports = {
  up: function(migration, DataTypes, done) {
    // add altering commands here, calling 'done' when finished
    migration.createTable('Users', {
        id: {
            type: DataTypes.INTEGER, 
            primaryKey: true, 
            autoIncrement: true, 
        }, 
        createdAt: {
          type: DataTypes.DATE
        },
        updatedAt: {
          type: DataTypes.DATE
        },
        firstname: DataTypes.STRING, 
        lastname: DataTypes.STRING,
        email: DataTypes.STRING, 
        password: DataTypes.STRING,
    });
    done()
  },
  down: function(migration, DataTypes, done) {
    // add reverting commands here, calling 'done' when finished
    done()
  }
}
Run Code Online (Sandbox Code Playgroud)

有人能解释一下 up 和 down 功能的用例和可能的实现吗?

谢谢!

Ele*_*to0 5

在迁移之前和迁移之后,您必须看到数据库是否有 2 个不同的“状态”。

在开始任何迁移之前,您没有任何Users表,所以假设您的数据库处于“状态 1”。

当您运行向上迁移 ( sequelize db:migrate) 时,您将数据库传递到“状态 2”(现在您Users的数据库中有该表)。

如果出现任何问题,或者您改变了对此次迁移的看法,您可以通过运行 down 功能 ( sequelize db:migrate:undo) 执行与 up 功能相反的操作,再次返回“状态 1” 。

在这种情况下,它很简单,如果您要创建一个Users, 来反转您只需删除它并再次返回“状态 1”。

module.exports = {

    up: function(migration, DataTypes, done) {

        // add altering commands here, calling 'done' when finished
        migration.createTable( 'Users', {

            id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true,
            },
            createdAt: {
                type: DataTypes.DATE
            },
            updatedAt: {
                type: DataTypes.DATE
            },
            firstname: DataTypes.STRING,
            lastname: DataTypes.STRING,
            email: DataTypes.STRING,
            password: DataTypes.STRING,

        })
        .nodeify( done );
    },

    down: function(migration, DataTypes, done) {
    // add reverting commands here, calling 'done' when finished

        migration.dropTable('Users')
        .nodeify( done );

    }

};
Run Code Online (Sandbox Code Playgroud)

例如,如果您要删除Users表而不是创建它,则只需交换上下代码。