-
Notifications
You must be signed in to change notification settings - Fork 9
Core_Migration
Каталог проекта будет выглядеть следующим образом:
project
|-- application
| |-- ...
| |-- modules
| | |-- simplemodule
| | | |-- ...
| | | |-- migrations
| | | | |--...
| | | | |-- YYYYMMDD_HHIISS_UU.php
| | | | `--...
| | | `-- ...
| | `--...
| `-- ...
|-- bin
| |-- zf.php
| |-- zf.sh
| |-- zfc.sh
| |-- zf.bat
|-- data
|-- library
|-- migration
| |-- YYYYMMDD_HHIISS_SS.php
| |-- 20081225_121256_04.php
| |-- 20090219_230016_89.php
| `-- 20090704_114826_88.php
|-- public
`-- tests
- Создание экземпляра класса Core_Migration_Manager? — обязательно необходимо задать параметры: projectDirectoryPath и modulesDirectoryPath (путь к проекту и папке с модулями соответственно). Кроме того, можно изменить значения параметров: migrationsSchemaTable (таблица в БД, где хранится история примененных миграций, по умолчанию: "migrations_schema") и migrationsDirectoryName (имя папки с миграциями, по умолчанию: "migrations");
- если при создании класса не обнаруживается таблица migrationsSchemaTable, она создается и все существующие файлы миграций считаются не примененными;
- менеджер миграций готов к использованию.
<?php
abstract class Core_Migration_Abstract
{
/**
* @return Core_Migration_Abstract
*/
abstract public function up();
/**
* @return Core_Migration_Abstract
*/
abstract public function down();
}
?>
- Для правильной работы в настройках соединения с БД следует указать параметр: resources.db.isDefaultTableAdapter = true;
- Выставить права на запись для директории migrations.
Проводится сравнение указанных таблиц либо всех таблиц в базе данных (в зависимости от переданных параметров) с состоянием БД зафиксированным в последней миграции (глобальной или отдельного модуля) и при нахождении отличий формируется миграция с автоматически сгенерированными запросами, позволяющая перейти от последней опубликованной версии БД к текущей.
Zend_Tool будет полезен для генерации/применения миграций (файл zfc.sh слегка изменен для корректной работы кастомных провайдеров).
Совет: для выполнения перечисленных ниже команд в OS Windows используйте zfc.bat
Подсказка: при выполнении команд вы можете передавать как именованные параметры, так и просто указывать значения аргументов в порядке их следования в соответствующем вызываемом методе. Следующие вызовы эквивалентны:
zfc.sh generate migration --module=menu
zfc.sh generate migration menu
# создание пустой миграции
~$ ./zfc.sh create migration
# создание пустой миграции c меткой и описанием
~$ ./zfc.sh create migration --label=MyMigration --desc="This is my first migration"
# создание пустой миграции для модуля с именем <module>
~$ ./zfc.sh create migration <module>
# генерация новой глобальной миграции
~$ ./zfc.sh generate migration
# генерация новой миграции для модуля menu,
# при этом рекомендуется указывать список таблиц модуля с помощью параметра --whitelist
~$ ./zfc.sh generate migration --module=menu --whitelist=menu
# также можно исключать тавлицы с помощью "черного списка"
~$ ./zfc.sh generate migration --blacklist=menu
# если необходимо указать в параметрах --blacklist или --whitelist
# несколько таблиц, то просто перечислите их через запятую
~$ ./zfc.sh generate migration --blacklist=menu,users
# для того чтобы просмотреть генерируемые запросы без создания миграции, используйте:
~$ ./zfc.sh diff migration --blacklist=menu,users
# show global migrations list
~$ ./zfc.sh listing migration
# show migrations list for module with name <module>
~$ ./zfc.sh listing migration <module>
# migrate to last global migration
~$ ./zfc.sh up migration
# migrate to last migration from module with name <module>
~$ ./zfc.sh up migration <module>
# migrate to selected global migration
~$ ./zfc.sh up migration <migration>
# migrate to selected migration from module with name <module>
~$ ./zfc.sh up migration <module> <migration>
# fake upgrade selected global migration
~$ ./zfc.sh fake migration <migration>
# fake upgrade selected migration from module with name <module>
~$ ./zfc.sh fake migration <module> <migration>
# show current global migration
~$ ./zfc.sh current migration
# show current migration for module with name <module>
~$ ./zfc.sh current migration <module>
# rollback last global migration
~$ ./zfc.sh rollback migration
# rollback last migration from module with name <module>
~$ ./zfc.sh rollback migration <module>
# rollback last <step> global migrations
~$ ./zfc.sh rollback migration <step>
# rollback last <step> migrations from module with name <module>
~$ ./zfc.sh rollback migration <module> <step>
# downgrade all global migrations
~$ ./zfc.sh down migration
# downgrade all migrations from module with name <module>
~$ ./zfc.sh down migration <module>
# downgrade to selected global migration
~$ ./zfc.sh down migration <migration>
# downgrade to selected migration from module with name <module>
~$ ./zfc.sh down migration <module> <migration>