代码之家  ›  专栏  ›  技术社区  ›  modernator

使用Sequelize添加/删除字段

  •  0
  • modernator  · 技术社区  · 6 年前

    我在使用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”字符串类型,但是我找不到有关此过程的任何相关信息。

    我该走了吗 迁移:撤消 要删除所有表并更新迁移模型文件并重新进行迁移吗?我认为这不是使用Sequelize的正确方法。

    我也一直混淆“迁移”的概念,为什么要使用它?

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

    任何建议都会非常感谢的!

    1 回复  |  直到 6 年前
        1
  •  0
  •   modernator    6 年前

    通过创建新迁移并使用queryinterface.addcolumn创建新字段解决了这个问题!

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