karpenko-na-fork / bitrix-migrations
Database migrations for Bitrix CMS
Requires
- php: >=5.5.0
- symfony/console: ~2|~3|~4
- tightenco/collect: 5.*
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
README
Bitrix-migrations
Миграции БД для Битрикса и не только
Установка
-
composer require arrilot/bitrix-migrations
-
cp vendor/arrilot/bitrix-migrations/migrator migrator
- копируем исполняемый файл в удобное место. -
заходим внутрь и удостоверяемся что задается правильный $_SERVER['DOCUMENT_ROOT']. Меняем настройки если нужно
-
php migrator install
Данная команда создаст в БД таблицу для хранения названий выполненных миграций.
По умолчанию:
-
Таблица называется migrations.
-
composer.json
иmigrator
лежат в корне сайта. -
Файлы миграций будут создаваться в директории
./migrations
относительно скопированного на этапе 2 файла.
При необходимости всё это можно изменить в скопированном файле migrator
.
- Крайне рекомендуется сделать
migrator
и./migrations
недоступными по http через веб-сервер. *
Использование
Рабочий процесс
Рабочий процесс происходит через консоль и кратко описывается примерно так:
- Создаем файл (или файлы) миграции при помощи
php migrator make название_миграции
Файл миграции представляет из себя класс с двумя методами up()
и down()
-
Реализуем в методе
up()
необходимые изменения в БД. При желании в методеdown()
реализуем откат этих измнений -
Применяем имеющиеся миграции -
php migrator migrate
-
Вносим файлы миграций в систему контроля версий, чтобы их можно было запустить и на других машинах
Доступные команды
Список доступных команд можно получить в консоли - php migrator list
Шаблоны миграций
Так как изменение структуры БД битрикса через его АПИ - занятие крайне малоприятное, то для облегчения этого процесса есть механизм шаблонов миграций, работающий следущим образом:
При генерации файла миграции можно указать его шаблон: php migrator make название_миграции -t add_iblock
где add_block
- название шаблона.
При этом сгенерируется класс с бойлерплейтом из шаблона и остается лишь указать детали (например название и код инфоблока)
Свои шаблоны миграций можно добавить напрямую в файле migrator
при помощи TemplateCollection::registerTemplate()
Имеющиеся шаблоны:
php migrator status
- показывает доступные для выполнения миграции, а также последние выполненные.
Автоматическое создание миграций
Еще одна киллер-фича - режим автоматического создания миграций.
Для его включения необходимо добавить примерно следующее в init.php
Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');
В метод Manager::init()
передается путь до директории аналогичной конфигу в файле migrator
.
После этого при выполнении ряда действий в админке будет происходить следующее
-
Срабатывает битриксовый обработчик события
-
Создается файл миграции как при
php migrator make
-
Миграция помечается примененной
-
Показывается нотификация о предыдущих пунктах
Включение данного режима позволяет избавиться от ручного написания миграций для многих случаев. Ничего в создаваемых автоматически миграциях править не требуется.
Список обрабатываемых событий:
- Миграции используют события
OnBefore...
. Если при вашем изменении произошла ошибка (допустим не указана привязка к сайту при добавлении инфоблока) и было показано уведомление о том что миграция создана, необходимо вручную откатить такую миграцию при помощиphp migrator rollback --hard --delete
*
Обработка ошибок миграций
Для отмены миграции в момент её выполнения достаточно выкинуть исключение - php throw new MigrationException('Тут текст ошибки');
Ни сама миграция, ни последующие при этом применены не будут.
Использование вне Битрикс
Пакет создан для использования совместно с Битриксом, однако его довольно просто можно использовать и в других системах.
Для этого нужно в файле migrator
:
-
Заменить подключение ядра Битрикса на ядро другой системы.
-
Реализовать свой аналог
Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository;
и использовать его. -
По желанию отключить существующие шаблоны миграций, сделав свои.