Как изменить сиквелизацию миграций

Когда я изменяю свою модель и файл миграции и запускаю sequelize db:migrate:undo, а затем sequelize db:migrate, изменения не будут внесены в таблицу базы данных.

Вместо этого изменения влияют на последний файл миграции / файл модели.

1 ответ

Решение

Этот вопрос похож на этот здесь: Как добавить столбец в дальнейшем существующей модели.

Но в любом случае миграция - это просто набор инструкций, использующих методы queryInterface, поэтому, например, метод по умолчанию, который используется при генерации миграции с помощью cli, - это метод (createTable).
Если вы хотите каким-либо образом изменить таблицу, вам нужно использовать другой метод, например ( renameColumn: для переименования столбца, changeColumn: для изменения типа данных столбца, ..etc)

Например, если я хочу переименовать столбец с именем name в firstName на уже существующий (перенесенный) Users Таблица я бы создать новый файл миграции, чтобы изменить его, и это будет выглядеть так:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.renameColumn('Users', 'name', 'firstName', {
      type: Sequelize.STRING,
    })
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.renameColumn('Users', 'firstName', 'name', {
      type: Sequelize.STRING,
    })
  }
};

И это в примере добавления нового столбца (lastName) к той же таблице Users:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.addColumn('Users', 'lastName', {
      type: Sequelize.STRING
    })
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.removeColumn("Users", "lastName")
  }
};
Другие вопросы по тегам