2016-08-18 4 views
1

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

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 и должно быть настроено на уровне файла миграции.

ответ

5

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

В функции поднятом вам нужно добавить

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

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

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

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

1

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

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')); 
    }, 
};