Изменение существующей миграции Sequelize
Если вы только начали использовать CLI для продолжения и продолжения в разработке, вы определенно часто добавляли и удаляли столбцы. И да, все это время вы напрямую изменяли файл миграции, удаляли все миграции и снова запускали миграции, чтобы ваши изменения отразились.
Но я рад, что ты здесь, потому что ты понимаешь, что это неправильно, или, если ты узнаешь это впервые, рад за тебя. В рабочей среде вы не можете просто удалить все таблицы базы данных, потому что вы обновили миграцию. Это будет одна большая неразбериха, хотя есть резервные копии.
В любом случае в этой статье я покажу вам, как обновить столбец, добавить новый столбец или столбцы и удалить существующий столбец из/в существующей миграции.
Вот кое-что, что вы должны знать и понимать, это поможет, когда у вас возникнут проблемы с дальнейшими модификациями. Но если вам просто нужно быстрое решение, вы можете пропустить это и перейти к более содержательной части.
QueryInterface: Миграция — это просто набор инструкций с использованием метода queryInterface, это посредник между вами и вашей базой данных, так что есть вы и есть база данных, вы сами создаете и настраиваете свою таблицу, теперь вы хотите загрузить эту таблицу в базу данных, вы указываете queryInterface взять созданную вами таблицу и поместить ее в базу данных с помощью команды createTable.
Теперь мы не хотим создавать новую таблицу, мы хотим изменить существующую таблицу. queryInterface по-прежнему ваш человек, но он не понимает всех команд, у него есть своя команда, которую он понимает, поэтому для связи с ним вам нужно использовать его собственную команду, вы можете сказать ей:
addColumn если вы хотите добавить новый столбец или столбцы. Это метод продолжения, который использует queryInterface для добавления нового столбца в таблицу. Он берет у вас столбец и имя таблицы, заходит в базу данных, ищет имя таблицы и добавляет его.
изменитьКолонка если вы хотите изменить столбец, возможно, тип данных столбца. Это также метод продолжения, который использует queryInterface для изменения столбца. Он берет новые настройки, которые вы ему дали, имя таблицы, и входит в базу данных, ищет таблицу и вносит коррективы.
удалитьКолонка если вы хотите удалить столбец, вероятно, если вы сочтете его бесполезным. Это метод продолжения, который использует queryInterface для удаления столбца. Он ищет таблицу и столбец и выполняет действие за вас, вам все равно нужно указать имя таблицы, а затем имя столбца.
создатьтаблицу если вы создаете совершенно новую таблицу. Я полагаю, что вы, возможно, уже знакомы с этим. Без этого, я думаю, вы не сможете добавить, изменить или удалить столбец.
По сути, вы должны дать queryInterface что-то добавить, вот как вы можете это сделать. Вот где мы приступаем к этому, мы будем использовать проект для тестирования.
Так что, если у вас нет готового проекта и вы просто хотите этому научиться, я сделал стартер на Quicksi, которым вы можете легко пользоваться, все настроено за вас, проверьте это здесь:
Если вы используете стартер, пожалуйста, следуйте инструкциям по началу работы, чтобы получить стартер, затем создайте файл .env и добавьте URL-адрес своей базы данных. Затем создайте новую миграцию продолжения, которую вы можете изменить.
(Я). Обновление столбца
Теперь давайте обновим столбец в миграции, которую вы имеете или создали из стартера.
Допустим, у нас есть таблица User со столбцами «имя», «фамилия» и «апрель». И мы хотим обновить тип данных april с INTEGER на FLOAT с ключом allowNull и свойством false.
Пользовательская таблица до:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
april: {
type: Sequelize.INTEGER
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
};
queryInterface ждет, когда вы дадите ему команду, включая то, что он должен обновить и в какой таблице это должно быть сделано.
Чтобы дать queryInterface что-то, вам нужно создать новую миграцию:
Запустите эту команду:
sequelize migration:create --name name_of_your_migration
Для вас создана новая миграция. Затем отредактируйте новую созданную миграцию.
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.changeColumn('users', 'april', {
type: Sequelize.FLOAT,
allowNull: false
}),
]);
},
down: (queryInterface) => {
return Promise.all([queryInterface.changeColumn('users', 'april')]);
},
};
Затем запустите миграцию:
sequelize db:migrate
Вот и все! Обратите внимание, что мы передали имя таблицы и столбец в таблице, которую мы хотим обновить, queryInterface берет это и выполняет свою работу в базе данных.
(II). Удаление столбца
Давайте удалим столбец, который вы обновили в таблице User выше.
Вам нужно создать другой файл миграции.
sequelize migration:create --name name_of_your_migration
Теперь отредактируйте файл миграции и передайте его в queryInterface с помощью метода removeColumn.
return queryInterface.removeColumn('users', 'april');
Запустить миграцию:
sequelize db:migrate
(III). Добавление нового столбца
Теперь давайте добавим новый столбец в миграцию пользователей. Допустим, мы хотим добавить еще один столбец с именем «Июнь». Создайте еще один файл миграции.
sequelize migration:create --name name_of_your_migration
Теперь отредактируйте файл миграции и передайте его в queryInterface с помощью метода addColumn.
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.addColumn('users', 'june', {
type: Sequelize.STRING,
allowNull: true,
}),
]);
},
down: (queryInterface) => {
return Promise.all([queryInterface.removeColumn('users', 'june')]);
},
};
Не забудьте обновить свои модели новыми изменениями.
Я надеюсь, что это объясняет более понятные методы модификации.
Этот пост был создан мной 12 мая 2020 года на Dev.to и Середина
Но был обновлен.
Узнайте больше на индивидуальном сеансе наставничества со мной.
Нужна помощь с проектом? Я открыт для внештатных вакансий.