Phinx — система міграції бази даних

346

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

Phinx — система міграції бази данихPhinx — система міграції бази даних

Для початку хотів би зазначити ,що міграція— оновлення структури бази даних від однієї версії до іншої (зазвичай більш нової). При цьому Ви повинні розуміти, що міграція не передбачає перенесення бази даних з однієї системи управління базами даних в іншу. Міграція – це зміна елементів входять в структуру бази даних, тобто таблиць. Наприклад, створення і видалення таблиць, додавання нових полів, редагування існуючих і т. д.

Відповідно, під версією розуміється стан структури бази даних на певний момент часу. Наприклад, створення таблиці – версія 1. Створення таблиці – версія 2. Додавання полів у першу таблицю – версія 3 і т. д. Таким чином, міграції реалізують контроль версій стосовно до баз даних.

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

Почнемо, звичайно ж, з установки бібліотеки, а значить переходимо на офіційний сайт розробників.

Далі, клацнувши по кнопці “INSTALLNOW…” Ви побачите інструкції по установці даної бібліотеки. Я буду виконувати установку з використанням інструменту composer, бо він поставляється разом з інтерпретатором мови PHP, у програмному забезпеченні OpenSrver, який я використовую.

Відповідно відкриваємо консоль OpenServer, переходимо в каталог з даним веб-додатком і виконуємо наступні команди:

composer require robmorgan/phinx
composer install –no-dev

Після виконання даних команд, бібліотека Phinx буде встановлена у Вашому проекті. Далі, потрібно сформувати конфігураційний файл з розширенням .yml, в якому будуть міститися основні налаштування необхідні для роботи системи міграцій.

php vendor/robmorgan/phinx/bin/phinx init

Таким чином, вищевказана команда, створить спеціальний файл phinx.yml в корені проекту, який ми відкриваємо в текстовому редакторі.

paths:
migrations: %%PHINX_CONFIG_DIR%%/migrations
seeds: %%PHINX_CONFIG_DIR%%/seeds
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
host: localhost
name: production_db
user: root
pass:”
port: 3306
charset: utf8
development:
adapter: mysql
host: localhost
name: phinx_db
user: root
pass:”
port: 3306
charset: utf8
testing:
adapter: mysql
host: localhost
name: testing_db
user: root
pass:”
port: 3306
charset: utf8

Отже, параметри migrations і seeds – визначають шляхи для зберігання класів міграцій і класів додавання початкової інформації в таблиці, відповідно.

Параметр default_migration_table – задає назву створюваної таблиці в базі даних, яка необхідна для зберігання різної системної інформації.

Середовище розробки, тобто певний набір налаштувань, заданий в налаштуванні default_database. При цьому для кожної середовища розробки передбачені різні налаштування підключення до бази даних. Тому оберіть для себе цікаву середовище і додайте налаштування.

adapter – драйвер підключення;

host – сервер бази даних;

name – ім’я бази даних;

user – ім’я користувача;

pass – пароль користувача;

port – порт підключення;

charset – кодування.

Закінчивши, ми можемо створити перший міграцію, а значить виконаємо наступну команду в консолі.

phpvendor/robmorgan/phinx/bin/phinxcreateCreateTableArticles

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

Як Ви бачите – міграція це звичайний клас PHP, в якому за замовчуванням прописаний метод change), що реалізує оборотні міграції. Тобто міграція при запуску, так чи інакше виконує певну дію, наприклад додавання нових полів в певну таблицю бази даних. Але особливість міграцій полягає в тому, що Ви завжди можете скасувати дію виконується міграцією, тобто здійснити відкат. Тому дії, які будуть описані в методі change() – виконуються при запуску міграції і відповідно скасовуються при відкаті.

Крім вище зазначеного методу, Ви можете створити в класі міграції, два додаткових методу: up і down(). При запуску міграції – викликається на виконання метод up(), при відкаті – down(). Зауважте, що Phinx, ігнорує два вище зазначених методів, в тому випадку, коли описаний метод change).

Як видно з назви класу, нова міграція повинна створити таблицю Articles в базі даних, а значить, ми повинні додати спеціальний код метод change(), який і реалізує дану дію.

table(‘articles’);//id
$articles->addColumn(‘title’,’string’,array(‘limit’=>150))
->addColumn(‘alias’, ‘string’, array(‘limit’=>200))
->addColumn(‘text’, ‘text’)
->addColumn(‘view’, ‘integer’, array(‘default’=>10, ‘null’=>TRUE))
->addColumn(‘home’, ‘enum’, array(‘values’=>array(‘yes’, ‘no’)))
->addColumn(‘date’, ‘timestamp’, array(‘default’=>’CURRENT_TIMESTAMP’))
->addIndex(array(‘title’, ‘alias’), array(‘unique’=>TRUE))
->create();s3
}
}

Для початку необхідно вказати з якою таблицею ми будемо працювати, використовуючи метод table(). В якості першого аргументу передається ім’я таблиці, в нашому випадку “articles”. При цьому вищевказаний метод поверне об’єкт представляє дану таблицю, а значить далі ми можемо використовувати методи, які будуть формувати структуру майбутньої таблиці. Зокрема, метод addColumn() – додає новий елемент, тобто нове поле таблиці. Зверніть увагу, що в якості параметрів необхідно вказати ім’я створюваного поля, тип даних, які буде зберігати поле і останній необов’язковий аргумент – атрибути поля у вигляді масиву.

Повний список підтримуваних полів Ви можете побачити в офіційній документації по бібліотеці, або в відео версії даного уроку.

Завершальний метод ланцюжка – create(), який вказує бібліотеці, що необхідно створити нову таблицю. Створивши клас міграції, його потрібно запустити у роботу, для цього необхідно виконати наступну команду.

phpvendor/robmorgan/phinx/bin/phinxmigrate

Якщо в класі міграції, код описано вірно – в базі даних буде створена таблиця з набором полів, описаних з використанням методу addColumn(). Для відміни дій, виконаних класом міграції, необхідно здійснити відкат:

phpvendor/robmorgan/phinx/bin/phinxrollback

Таким чином, Ви скасуєте всі дії описані в методі change();

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

Всього Вам доброго і вдалого кодування!!!