karpenko-na-fork/bitrix-migrations

Database migrations for Bitrix CMS

2.6.6 2021-12-17 05:00 UTC

README

Latest Stable Version Total Downloads Build Status Scrutinizer Quality Score

Bitrix-migrations

Миграции БД для Битрикса и не только

Установка

  1. composer require arrilot/bitrix-migrations

  2. cp vendor/arrilot/bitrix-migrations/migrator migrator - копируем исполняемый файл в удобное место.

  3. заходим внутрь и удостоверяемся что задается правильный $_SERVER['DOCUMENT_ROOT']. Меняем настройки если нужно

  4. php migrator install

Данная команда создаст в БД таблицу для хранения названий выполненных миграций.

По умолчанию:

  1. Таблица называется migrations.

  2. composer.json и migrator лежат в корне сайта.

  3. Файлы миграций будут создаваться в директории ./migrations относительно скопированного на этапе 2 файла.

При необходимости всё это можно изменить в скопированном файле migrator.

  • Крайне рекомендуется сделать migrator и ./migrations недоступными по http через веб-сервер. *

Использование

Рабочий процесс

Рабочий процесс происходит через консоль и кратко описывается примерно так:

  1. Создаем файл (или файлы) миграции при помощи php migrator make название_миграции

Файл миграции представляет из себя класс с двумя методами up() и down()

  1. Реализуем в методе up()необходимые изменения в БД. При желании в методе down() реализуем откат этих измнений

  2. Применяем имеющиеся миграции - php migrator migrate

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

Доступные команды

Список доступных команд можно получить в консоли - php migrator list

Шаблоны миграций

Так как изменение структуры БД битрикса через его АПИ - занятие крайне малоприятное, то для облегчения этого процесса есть механизм шаблонов миграций, работающий следущим образом: При генерации файла миграции можно указать его шаблон: php migrator make название_миграции -t add_iblock где add_block - название шаблона. При этом сгенерируется класс с бойлерплейтом из шаблона и остается лишь указать детали (например название и код инфоблока) Свои шаблоны миграций можно добавить напрямую в файле migrator при помощи TemplateCollection::registerTemplate()

Имеющиеся шаблоны:

  1. php migrator status - показывает доступные для выполнения миграции, а также последние выполненные.

Автоматическое создание миграций

Еще одна киллер-фича - режим автоматического создания миграций. Для его включения необходимо добавить примерно следующее в init.php

Arrilot\BitrixMigrations\Autocreate\Manager::init($_SERVER["DOCUMENT_ROOT"].'/migrations');

В метод Manager::init() передается путь до директории аналогичной конфигу в файле migrator.

После этого при выполнении ряда действий в админке будет происходить следующее

  1. Срабатывает битриксовый обработчик события

  2. Создается файл миграции как при php migrator make

  3. Миграция помечается примененной

  4. Показывается нотификация о предыдущих пунктах

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

Список обрабатываемых событий:

  • Миграции используют события OnBefore.... Если при вашем изменении произошла ошибка (допустим не указана привязка к сайту при добавлении инфоблока) и было показано уведомление о том что миграция создана, необходимо вручную откатить такую миграцию при помощи php migrator rollback --hard --delete *

Обработка ошибок миграций

Для отмены миграции в момент её выполнения достаточно выкинуть исключение - php throw new MigrationException('Тут текст ошибки'); Ни сама миграция, ни последующие при этом применены не будут.

Использование вне Битрикс

Пакет создан для использования совместно с Битриксом, однако его довольно просто можно использовать и в других системах. Для этого нужно в файле migrator:

  1. Заменить подключение ядра Битрикса на ядро другой системы.

  2. Реализовать свой аналог Arrilot\BitrixMigrations\Repositories\BitrixDatabaseRepository; и использовать его.

  3. По желанию отключить существующие шаблоны миграций, сделав свои.