Зачем dbschemix
dbschemix/migrator — инструмент для управления изменениями схемы и данных базы данных. Вы описываете миграции обычными SQL-файлами, а Migrator следит за тем, какие из них уже применены, и выполняет только новые. Библиотека не зависит от фреймворка и подключается в любой PHP-проект через Composer.
Проблема, которую решает инструмент: разные окружения — разработка, тестирование, прод — должны содержать одинаковую схему. Без единого инструмента миграции применяются вручную, порядок теряется, откатить изменение трудно. dbschemix фиксирует порядок применения, хранит историю версий и позволяет откатить целый набор изменений одной командой.
Принципы
Чистый SQL
Миграции пишутся на SQL — без DSL, без Active Record, без Query Builder. Файл содержит обычный SQL для целевой СУБД, и именно этот SQL выполняется в базе данных. Нет промежуточного слоя, который мог бы сгенерировать не то, что вы написали.
Фреймворк-агностик
Migrator не требует Laravel, Symfony, Yii или любого другого фреймворка. Он подключается в любой PHP-проект, где есть Composer. Если проект уже использует встроенные миграции фреймворка, dbschemix может работать рядом с ними — для отдельной базы или для баз данных, которые фреймворк не охватывает.
Версионирование батчей
Миграции, применённые одним прогоном migrate:up, получают общий номер версии. Этот номер отображается в выводе как vers: <число>. Откатить всю партию можно одной командой migrate:down --latest-version — без необходимости анализировать историю вручную.
Fixtures и repeatable-миграции
Фикстуры — это SQL-файлы с тестовыми или начальными данными. Они хранятся в отдельном каталоге (<db-name>-fixture) и применяются командой migrate:fixture, а не migrate:up. Повторяемые миграции хранятся в каталоге <db-name>-repeatable и выполняются заново при каждом изменении содержимого файла — удобно для views, функций и других объектов, которые нужно пересоздавать.
Поддерживаемые СУБД
Из коробки доступны PostgreSQL, MySQL и SQLite через пакет dbschemix/pdo. Если вам нужна другая СУБД или нестандартный способ подключения, реализуйте интерфейс DriverInterface и передайте свой драйвер в конструктор Migration. Подробнее — в разделе Конфигурация.
Когда подходит и когда нет
dbschemix подходит для проектов, где SQL — основной язык работы с базой данных. Если команда уже привыкла писать и ревьюить SQL-файлы, инструмент органично встраивается в существующий процесс.
Инструмент не подходит, если вам нужен генератор миграций на основе ORM-моделей. dbschemix не анализирует структуру ваших классов и не создаёт SQL автоматически — только выполняет то, что вы написали вручную.