Почему Phinx?
Почти в каждом современном PHP фреймворке есть собственная система миграций. Так уж сложилось, что в Битрикс нет никакой возможности модификации структуры базы данных, кроме как делать это в админке.
Выбор пал на Phinx по следующем причинам:
- Он не привязан к фреймворку и может работать как самостоятельный модуль
- В нем есть разделения на миграцию структуры и на миграцию данных (Seeder)
- Имеет удобный builder, а также позволяет использовать ORM Bitrix в миграциях
- Вся настройка сводится к одному php файлу
Установка Phinx
Устанавливаем Phinx через менеджер зависимостей composer
composer require robmorgan/phinx
Если на проекте не был установлен composer, нужно подключить
vendor/autoload.php в файле /local/php_interface/init.php
//init composer autoloader
require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
Настройка Phinx
Phinx легко подружить с Битрикс, вся настройка производится в одном конфигурационном файле.
Для начала создадим необходимые директории:
mkdir database
mkdir database/migrations
mkdir database/seeds
Далее создаем файл phinx.php
в корне вашего проекта со следующим содержимым:
use Bitrix\Main\Config\Configuration;
$_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__);
include $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/cli/bootstrap.php';
$connections = Configuration::getInstance()->get('connections');
$connection = $connections['default'];
return [
'paths' => [
'migrations' => [
'\Bitrix\Main' => '%%PHINX_CONFIG_DIR%%/database/migrations',
],
'seeds' => [
'\Bitrix\Main' => '%%PHINX_CONFIG_DIR%%/database/seeds',
],
],
'environments' => [
'default_migration_table' => 'phinxlog',
'default_database' => 'production',
'production' => [
'adapter' => 'mysql',
'host' => $connection['host'],
'name' => $connection['database'],
'user' => $connection['login'],
'pass' => $connection['password'],
'port' => '3306',
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
],
],
'version_order' => 'creation',
];
В этом файле мы подключаем ядро Битрикс, указываем директории для хранения миграций и сидов (/database/migrations
и /database/seeds
), и настраиваем соединение с БД.
Важно! Phinx требует PHP расширение pdo_mysql.
Как работать с миграциями, можно посмотреть на официальном сайте:
https://book.cakephp.org/phinx/0/en/migrations.html
Бонусом будет то, что в миграциях вы можете использовать ORM Битрикс, так как в файле конфигурации мы подключили ядро.