通过使用Sequelize添加/删除字段

时间:2018-10-21 07:42:25

标签: javascript node.js orm sequelize.js rdbms

我正在使用Sequelize-cli,使用它时遇到了一些麻烦。

请注意,这是我第一次使用Sequelize,可能是我迷失了一些概念,非常感谢它告诉我我所缺少的东西。

我制作了一个像这样的简单模型:

$ sequelize model:generate --name Notes --attributes text:content

然后我得到了这个迁移文件:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Notes', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      content: {
        type: Sequelize.TEXT
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Notes');
  }
};

但是现在我需要添加新的字段“ title”作为字符串类型,但是我找不到与此过程有关的任何信息。

我应该只运行 db:migrate:undo 来删除所有表并更新迁移和模型文件并重做迁移吗?我认为这不是使用续集的正确方法。

我也一直对“迁移”的概念感到困惑,为什么我要使用它?

运行“ migrate:undo”命令后,似乎所有数据都消失了,有没有一种方法可以保存它们,以便在更新表模式后可以恢复数据?

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

通过创建新迁移并使用queryInterface.addColumn创建新字段来解决此问题!

module.exports = {
  up: (queryInterface, Sequelize) => {
     return queryInterface.addColumn(
      'Notes',
      'title',
      Sequelize.STRING
    );
  },
   down: (queryInterface, Sequelize) => {
   return queryInterface.removeColumn(
     'Notes',
     'title'
   );
  }
};