Как да създадаем миграции с Sequelize

Как да създадаем миграции с Sequelize
Photo by Julia Craice / Unsplash

Миграции в 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 може да бъде мощен инструмент за управление на схемата на базата данни. Те ви позволяват да следите историята на промените в схемата, да осигурите консистентността на данните и да улесните разработката на приложението.