Я добавил модель и файл миграции с помощью этой команды
node_modules/.bin/sequelize model:generate --name User --attributes firstName:string,lastName:string,email:string
Теперь я хотел добавить еще несколько полей, таких как пол и возраст, в существующую таблицу (модель). Я изменил модель вручную и запустил эту команду
node_modules/.bin/sequelize db:migrate
Но он отвечает, что «Миграции не выполнялись, схема базы данных уже обновлена. "
User.js
'use strict';
module.exports = (sequelize, DataTypes) => {
var User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {});
User.associate = function(models) {
// associations can be defined here
};
return User;
};
Заранее спасибо :)
Я добавил файл user.js! пожалуйста, проверьте
проверьте ответ и дайте мне знать, если у вас возникнут трудности





Чтобы добавить новые поля в таблицу, мы должны использовать каркас миграции, как показано ниже.
sequelize migration:create --name Users
Откройте файл миграции и добавьте приведенные ниже коды.
module.exports = {
up: function (queryInterface, Sequelize) {
return [ queryInterface.addColumn(
'Users',
'gender',
Sequelize.STRING
),
queryInterface.addColumn(
'Users',
'age',
Sequelize.STRING
)];
},
down: function (queryInterface, Sequelize) {
// logic for reverting the changes
}
};
Затем просто запустите миграцию
node_modules/.bin/sequelize db:migrate
Примечание: переданный объект queryInterface может использоваться для изменения базы данных. Объект Продолжить хранит доступные типы данных, такие как STRING или INTEGER.
Полный список методов в интерфейсе запросов
Я надеюсь, что это поможет вам. Если у вас возникнут проблемы, дайте мне знать.
Ответ Суветана верен, но во фрагменте кода миграции есть небольшая ошибка. При последовательной миграции ожидается возврат обещания, что указано в комментарии в сгенерированном каркасе миграции:
Add altering commands here.
Return a promise to correctly handle asynchronicity.
Example:
return queryInterface.createTable('users', { id: Sequelize.INTEGER });
Таким образом, возврат массива обещаний может потенциально привести к неожиданным результатам, поскольку нет гарантии, что все обещания будут разрешены до перехода к следующей миграции. Для большинства операций вы вряд ли столкнетесь с какими-либо проблемами, так как большинство задач будет завершено до того, как Sequelize закроет процесс. Но я думаю, что лучше перестраховаться, чем сожалеть, когда дело доходит до миграции базы данных. Вы по-прежнему можете использовать массив обещаний; вам просто нужно обернуть это вызовом Promise.all.
Пример Суветана, но с Promise.all:
module.exports = {
up: function (queryInterface, Sequelize) {
return Promise.all([
queryInterface.addColumn(
'Users',
'gender',
Sequelize.STRING
),
queryInterface.addColumn(
'Users',
'age',
Sequelize.STRING
)
]);
},
down: function (queryInterface, Sequelize) {
// logic for reverting the changes
}
};
«Promise.all» отсутствовал в моем случае и генерировал исключение. Спасибо
В дополнение к ответу @Suvethan Nantha, который, кстати, мне только что помог, убедитесь, что вы заключили запросы в Promise.all, т.е. вернули **Promise.all**([queryInterface.addColumn(...)]), чтобы он вернул обещание, поэтому может возникнуть ошибка. Ваше здоровье!
можете прикрепить к вопросу файл User.js?