Компонент предназначен для создания и управления миграциями БД без зависимости от какого-либо фреймворка. Поддерживает MySQL 5.5+, использует PHP 5.5+. Позволяет используя привычные инструменты работать c MySQL, а затем на основе существующей таблицы генерировать файлы миграций. В дальнейшем из этих файлов можно полностью восстановить структуру БД ил её данные до любой созданной ранее версии.
- Скачайте файлы компонента или клонируйте репозиторий.
- Запустите команду
composer update
чтобы установить зависимости. - На основе файла
config.inc.sample.php
создайте файлconfig.inc.php
, используя свои настройки. - ...profit
-
Выполните команду
composer require hetzerok/sam
- в результате установится компонент и все его зависимости. -
Скопируйте файл
vendor/hetzerok/sam/run.php
в удобное для запуска место. -
На основе файла
vendor/hetzerok/sam/config/config.inc.sample.php
создайте файлconfig.inc.php
, используя свои настройки и поместите их в удобную для вас директорию -
Внесите изменения в файл
run.php
:9 строка:
require __DIR__.'/vendor/autoload.php';
пропишите свой путь до автолодера.
17 строка:
$config = Config::getInstance('config/');
пропишите свой путь до файла
config.inc.php
.
Для работы с CLI требуется выполнить файл run.php
через консоль. При запуске будет показан набор доступных команд.
migrations:initialize
- инициализация системы миграций и создание первой миграции.migrations:generate
- создание миграции (кроме инициилизирующей)migrations:migrate
- применение миграций. Принимает опцию--last
, при помощи которой передаётся ключ последней накатываемой миграции.
Вы устанавливаете компонент, инициализируете систему командой migrations:initialize
, вносите изменения в бд любым
удобным вам способом. Когда приходит момент зафиксировать этап разработки используете команду migrations:generate
.
Миграции можно хранить с помощью VCS или передавать любым удобным способом. При возникновении необходимости обновить
структуру используется команда migrations:migrate
.
username
- Имя пользователя БДpassword
- Пароль пользователя БДdsn
- DSN строка для соединения с БД c помощью PDO
import_data
- (0|1) - Флаг, если включен позволяет использовать миграции для данныхtable_prefix
- Префикс таблиц. Только таблицы с указанным префиксом будут добавляться в миграции.conside_foreign_keys
- (0|1) - Флаг, учитывать ли в миграциях внешние ключи.conside_indexes
- (0|1) - Флаг, учитывать ли в миграциях индексы.
migration_path
- Путь к директории с миграциямиschema_path
- Путь к директории со схемами ( и схемами данных )data_path
- Путь к директории с миграциями данныхversion_format
- (json) - формат хранения файлов версийschema_format
- (json) - формат хранения файлов схемmigration_format
- (json) - формат хранения файлов миграцийtime_format
- формат времени для именования миграцийlocal_version_file
- путь к файлу локальной версии (без расширения)global_version_file
- путь к файлу глобальной версии (без расширения)log_path
- путь к файлу с логамиlog_file
- имя файла логов
import_data_tables
- список таблиц для которых будут создаваться миграции данных. Необхоимо явно указать таблицы (без префикса) для которых нужны такие миграции.
Если используется VCS GIT, то рекомендую настроить ваш .gitignore
файл соответствующим образом.
В общем случае игнорируйте файл config.inc.php
, однако оставьте файл config.inc.sample.php
для примера. Также
игнорируте файлы с префиксом local схем и версий. К роме того игнорируйте логи
- Будут учтены только таблицы с префиксом, который указан в конфиге, если не хотите использовать префикс укажите в
качестве значения настройки
table_prefix
пустую строку. - Для того чтобы иметь возможность переименовывать таблицы и столбцы добавляйте к ним комментарий. Пример: вы хотите
переименовать таблицу
users
вmy_users
. В начале добавьте комментарий к таблице (любой), выполните командуmigrations:generate
затем переименуйте таблицу и вновь выполнитеmigrations:generate
в противном случае будет произведено удаление таблицыusers
и создание таблицыmy_users
. - Миграции данных рекомендуется использовать на таблицах с первичным ключем. Это ускоряет запросы и экономит место, так так в таком случае можно однозначно идентифицировать строку по первичному ключу.
- На данный момент компонент работает только с кодировкой utf-8 и принудительно при соединении с БД задает команду
SET NAMES utf-8