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

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