Розділи

Міграції бази даних


ПРИМІТКА: Міграції Phalcon були вилучені з DevTools та переміщені в окреме сховище.

Git репозиторій

https://github.com/phalcon/migrations

Вимоги

  • PHP >= 7.2
  • Phalcon >= 4.0.5

Встановлення за допомогою Composer

composer require --dev phalcon/migrations

Швидкий старт

Що вам потрібно для швидкого старту:

  • Файл конфігурації в кореневому каталозі вашого проекту (ви також можете передати їх як параметри в середовищі CLI)
  • Створення структури таблиць бази даних
  • Виконайте команду для створення міграцій

Після цього ви зможете виконати цю міграцію (run) в іншому середовищі для створення такої ж структури БД.

Створюємо файл конфігурації

<?php

use Phalcon\Config;

return new Config([
    'database' => [
        'adapter' => 'mysql',
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'dbname' => 'db-name',
        'charset' => 'utf8',
    ],
    'application' => [
        'logInDb' => true,
        'migrationsDir' => 'db/migrations',
        'migrationsTsBased' => true, // true - використовуємо TIMESTAMP як назву версії, false - використовуємо версії
        'exportDataFromTables' => [
            // Імена таблиць
            // Увага! Це експортує дані кожної нової міграції
        ],
    ],
]);

Генерування міграцій

Базова генерація

vendor/bin/phalcon-migrations generate

**Згенеруйте спеціальну таблицю і експортуйте з неї дані

vendor/bin/phalcon-migrations generate \
    --config=migrations.php \
    --table=users \
    --exportDataFromTables=users \
    --data=oncreate

Запуск міграції

vendor/bin/phalcon-migrations run

Список існуючих міграцій

vendor/bin/phalcon-migrations list

Приклад використання

Запустити міграції з каталогу міграцій

use Phalcon\Migrations\Migrations;

$migration = new Migrations();
$migration::run([
    'migrationsDir' => [
        __DIR__ . '/migrations',
    ],
    'config' => [
        'database' => [
            'adapter' => 'Mysql',
            'host' => 'phalcon-db-mysql',
            'username' => 'root',
            'password' => 'root',
            'dbname' => 'vokuro',
        ],
    ]
]);

Методи міграції

Кожна міграція є окремим класом, який працює як сутність для конкретної таблиці бази даних. Всередині кожного класу є різні методи, які можуть виконуватися під час роботи міграції.

Кожен файл міграції (та клас) може реалізувати конкретні методи, які будуть виконані на основі запитаної операції. У кожному методі немає жодних обмежень за логікою.

Таблиця нижче показує методи міграції. Вони зберігаються в порядку виконання, від перших до останніх.

Працює догори

Назва методу Опис
morph Морфологічна структура таблиці
afterCreateTable Виконати щось одразу після створення таблиці
up Таблиця створена і готова до роботи з нею
afterUp Додатковий метод для виконання у деяких специфічних випадках

Працює донизу

Назва методу Опис
down Зазвичай ви тут додаєте видалення таблиці або очищення даних
aferDown Додатковий метод для виконання після всіх очищень
morph (з попередньої міграції) Оскільки міграція була переміщена назад, то потрібно все повернути до попереднього стану

Параметри і опції CLI

Аргументи

Аргумент Опис
generate Генерування міграції
run Запуск міграції
list Список усіх доступних міграцій

Опції

Дія Опис
–config=s Файл конфігурації
–migrations=s Папка міграцій. Для вказання декількох каталогів запишіть їх через кому
–directory=s Каталог, де був створений проект
–table=s Таблиця для міграції. Ім’я таблиці або префікс таблиць з зірочкою. За замовчуванням: всі
–version=s Версія для міграції
–descr=s Опис міграції (використовується для міграцій на основі позначки часу)
–data=s Експорт даних [‘always’ або ‘oncreate’] (Дані імпортуються під час виконання міграції)
–exportDataFromTables=s Експорт даних з вказаних таблиць, використовуйте розділення комами.
–force Примусово перезаписати існуючі міграції
–ts-based Версія міграції на основі часових позначок
–log-in-db Зберігати журнал міграції у базі даних, а не у файлі
–dry Спроба запитуваної операції без внесення змін до системи (лише для створення)
–verbose Вивід інформації для налагодження під час роботи (лише виконання)
–no-auto-increment Вимкнути автоматичне доповнення (тільки для генерації)
–skip-ref-schema Пропустити схему залежностей всередині згенерованої міграції (лише для створення)
–skip-foreign-checks Загорнути запит SET FOREIGN_KEY_CHECKS до і після виконання запиту (лише для виконання)
–help Показує цю довідку

Версія міграції на основі часових позначок

Використання цього підходу корисне, коли більше одного розробника бере участь в управлінні структурою бази даних. Використовуйте параметр 'migrationsTsBased' => true у файлі конфігурації або --ts-based в середовищі CLI. Крім того, необхідно вказати суфікс descr, це може бути що завгодно, наприклад: семантичні версії.

Поточна команда

vendor/bin/phalcon-migrations generate --ts-based --descr=1.0.0

Створить назву теки з такими іменами

  • 1582539287636860_1.0.0
  • 1682539471102635_1.0.0
  • 1782539471102635_1.0.0

Міграції будуть виконані від старіших до новіших.

ПРИМІТКА: Щоразу, коли виконуються міграції, програма сканує всі доступні міграції та їх статус незалежно від їх “віку”. Якщо одна чи кілька не були виконані попереднього разу, вони будуть виконані наступного разу.