Sequelize-CLI Добавить столбец в существующую модель

Я прочитал большое количество документации sequelize-cli и, похоже, не могу понять, как добавить столбец в существующую модель, которая у меня есть. У меня есть модель с именем models/team.js, и я хочу добавить столбец с именем role_name в модель с sequelize model:create --name team --attributes role_name:string, но я получаю сообщение для перезаписи, а не изменения:

Loaded configuration file "config/config.json".
Using environment "development".
The file /Users/user/Desktop/Projects/node/app-repo/app/models/team.js already exists. Run "sequelize model:create --force" to overwrite it.

Я не хочу перезаписывать файл, из-за которого я думаю, что это неправильная команда. Это также заставляет меня задаться вопросом, возможно ли это с помощью cli и должно ли это быть отрегулировано на уровне файла миграции.


person cphill    schedule 18.08.2016    source источник


Ответы (3)


Для добавления столбца вам понадобится другой файл миграции.

В функции вверх вам нужно добавить

 queryInterface.addColumn(
     'nameOfAnExistingTable',
      'nameofTheNewAttribute',
      Sequelize.STRING)

В функции вниз вам нужно

queryInterface.removeColumn(
      'nameOfAnExistingTable',
      'nameOfTheAttribute')

Затем запустите миграцию.

person Bhagya M    schedule 21.11.2016
comment
Как я могу сгенерировать другой файл миграции с помощью команды, поскольку у нас есть такая команда 'node_modules / .bin / sequelize model: generate --name User --attributes firstName: string' Это будет генерировать модель и файл миграции одновременно. - person Ketav; 11.06.2018
comment
И, как вы предлагаете, я делаю то же самое, но файл модели не обновляется новыми полями в файле миграции. - person Ketav; 11.06.2018
comment
@KetavChotaliya ты когда-нибудь в этом догадывался? Я только что выполнил свою первую миграцию, но мой файл моделей не был обновлен: / - Ожидается ли, что вы вручную обновляете файл моделей при каждой миграции? - person jamis0n; 08.01.2020

Если вы хотите внести несколько изменений за одну миграцию, вы можете просто вернуть связанные обещания следующим образом:

module.exports = {
up: function (queryInterface, Sequelize) {
    return queryInterface.addColumn('yourTableName', 'firstNewColumnName', Sequelize.STRING)
        .then(_ => queryInterface.addColumn('yourTableName', 'secondNewColumnName', Sequelize.STRING))
        .then(_ => queryInterface.addColumn('yourTableName', 'thirdNewColumnName', Sequelize.STRING));
    },

down: function (queryInterface, _Sequelize) {
    return queryInterface.removeColumn('yourTableName', 'firstNewColumnName')
        .then(_ => queryInterface.removeColumn('yourTableName', 'secondNewColumnName'))
        .then(_ => queryInterface.removeColumn('yourTableName', 'thirdNewColumnName'));
    },
};
person Matúš Šťastný    schedule 15.09.2017
comment
Вы можете использовать Promise.all для создания нескольких обещаний - person Hossam Maher; 16.07.2021

Думаю, у меня с тобой точно такая же проблема. Я попытался найти команду sequelize, которая сгенерирует мне файл миграции с queryInterface.addColumn внутри. Но со временем я понял, что в одной команде этого не сделать. Сначала нам нужно создать файл миграции.

Попробуйте выполнить команду sequelize, чтобы увидеть все доступные параметры. Вы знаете, что если вы запустите sequelize model:generate (то же самое, что и model:create), вы создадите новые файлы модели и миграции одновременно. Но вам нужен файл миграции, но не файл модели. Это неправильная команда.

Поэтому, если вы просто хотите добавить столбец, все, что вам нужно сделать, это использовать команду sequelize migration:generate для создания файла миграции. Если вы попытаетесь запустить эту команду, вы также увидите другие параметры и обратите внимание, что есть параметр с именем --name, который описан как обязательный. Просто дайте описательное имя по мере необходимости. Пример команды: sequelize migration:generate --name add-registration-complete-and-currency-column.

Наконец, измените файл миграции с помощью QueryInterface и вручную добавьте столбец в файл модели. Я надеюсь, что это помогает.

person Insan Jati    schedule 15.05.2018