Как да създадаем миграции с Sequelize
Миграции в Sequelize представляват начин за автоматично създаване или обновяване на таблиците в базата данни спрямо определена схема (модел). С помощта на миграции може да се запази историята на промените във времето, както и да се осигури възможност за бързо преминаване от една версия на схемата към друга.
За да създадете миграция с Sequelize, трябва да изпълните следните стъпки:
Инсталирайте пакета за миграции на Sequelize
npm install sequelize
npm install --save-dev sequelize-cli
Създайте файл с конфигурация за миграции .sequelizerc. Този файл трябва да съдържа пътищата до моделите, миграциите и конфигурацията за базата данни.
const path = require('path');
module.exports = {
'config': path.resolve('config', 'database.js'),
'models-path': path.resolve('models'),
'seeders-path': path.resolve('seeders'),
'migrations-path': path.resolve('migrations')
}
Създайте първа миграция с помощта на CLI на Sequelize.
sequelize migration:generate --name create-users
Това ще създаде нов файл за миграция в папката migrations
, наречен XXXXXXXXXXXXX-create-users.js
, където XXXXXXXXXXXXX
е времевата маркировка на миграцията.
Отворете файла за миграция и дефинирайте въпросните промени, които искате да направите. Например, за да създадете таблица "users" с три полета, "firstName", "lastName" и "email", може да използвате следния код:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true
},
createdAt: {
type: Sequelize.DATE,
allowNull: false
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
Изпълнете миграцията към базата данни.
sequelize db:migrate
Това ще изпълни up
метода на всички миграции, които все още не са били изпълнени към базата данни. Ако искате да отмените миграцията, можете да изпълните следната команда:
sequelize db:migrate:undo
Това ще изпълни down
метода на последната миграция, която е била приложена към базата данни. Ако искате да отмените няколко миграции, можете да изпълните командата db:migrate:undo:all
, която ще изпълни down
метода на всички приложени миграции в обратен ред.
Също така, можете да използвате миграции, за да промените вече съществуваща таблица, като добавите, премахнете или промените полета. За да направите това, трябва да създадете нова миграция и да дефинирате нужните промени в up
метода. Например, за да добавите ново поле "age" към таблицата "users", можете да използвате следния код:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('users', 'age', {
type: Sequelize.INTEGER,
allowNull: true
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'age');
}
};
След като създадете миграцията, можете да изпълните командата db:migrate
за да я приложите към базата данни и да добавите новото поле "age" към таблицата "users".
Използването на миграции в Sequelize може да бъде мощен инструмент за управление на схемата на базата данни. Те ви позволяват да следите историята на промените в схемата, да осигурите консистентността на данните и да улесните разработката на приложението.