Миграции Phinx в Битрикс

Миграции Phinx в Битрикс

Почему 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 Битрикс, так как в файле конфигурации мы подключили ядро.

Копирование материалов сайта возможно только с указанием ссылки на первоисточник.