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

NOTE: Phalcon migrations have been removed from DevTools and moved to a separate repository.
Git репозиторій
https://github.com/phalcon/migrations
Вимоги
- PHP >= 7.5
- Phalcon >= 5.0.0
Встановлення за допомогою Composer
composer require --dev phalcon/migrations
Швидкий старт
Що вам потрібно для швидкого старту:
- Файл конфігурації в кореневому каталозі вашого проекту (ви також можете передати їх як параметри в середовищі CLI)
- Створення структури таблиць бази даних
- Виконайте команду для створення міграцій
Після цього ви зможете виконати цю міграцію (run) в іншому середовищі для створення такої ж структури БД.
Створюємо файл конфігурації
<?php
use Phalcon\Config\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',
// true - TIMESTAMP, false - versions
'migrationsTsBased' => true,
'exportDataFromTables' => [
// Tables names
],
],
]);
NOTE: If exportDataFromTables
is set, data will be exported with every migration
Генерування міграцій
Базова генерація
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',
],
]
]);
Методи міграції
Each migration is a separate class that works as an entity for specific database table. Всередині кожного класу є різні методи, які можуть виконуватися під час роботи міграції.
Кожен файл міграції (та клас) може реалізувати конкретні методи, які будуть виконані на основі запитаної операції. У кожному методі немає жодних обмежень за логікою.
Таблиця нижче показує методи міграції. Вони зберігаються в порядку виконання, від перших до останніх.
Працює догори
Назва методу |
Description |
morph |
Морфологічна структура таблиці |
afterCreateTable |
Виконати щось одразу після створення таблиці |
up |
Таблиця створена і готова до роботи з нею |
afterUp |
Додатковий метод для виконання у деяких специфічних випадках |
Працює донизу
Назва методу |
Description |
down |
Зазвичай ви тут додаєте видалення таблиці або очищення даних |
aferDown |
Додатковий метод для виконання після всіх очищень |
morph |
(from previous migration) As the migration was moved backward, there need to be all returned to previous state |
Параметри і опції CLI
Аргументи
Аргумент |
Description |
generate |
Генерування міграції |
run |
Запуск міграції |
list |
Список усіх доступних міграцій |
Options
Action |
Description |
--config=s |
Файл конфігурації |
--migrations=s |
Папка міграцій. Для вказання декількох каталогів запишіть їх через кому |
--directory=s |
Каталог, де був створений проект |
--table=s |
Таблиця для міграції. Ім’я таблиці або префікс таблиць з зірочкою. За замовчуванням: всі |
--version=s |
Версія для міграції |
--descr=s |
Опис міграції (використовується для міграцій на основі позначки часу) |
--data=s |
Експорт даних [‘always’ або ‘oncreate’] (Дані імпортуються під час виконання міграції) |
--exportDataFromTables=s |
Export data from specific tables, use comma separated string |
--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
Міграції будуть виконані від старіших до новіших.
NOTE: Whenever migrations are run, the application scans all available migrations and their status irrespective of their “age”. Якщо одна чи кілька не були виконані попереднього разу, вони будуть виконані наступного разу.