Skip to content
This repository has been archived by the owner on Jun 4, 2021. It is now read-only.

Core_Migration

Nikolay Galkin edited this page Jun 7, 2013 · 2 revisions

Структура

Каталог проекта будет выглядеть следующим образом:

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

Zend_Tool будет полезен для генерации/применения миграций (файл zfc.sh слегка изменен для корректной работы кастомных провайдеров).

Совет: для выполнения перечисленных ниже команд в OS Windows используйте zfc.bat

Подсказка: при выполнении команд вы можете передавать как именованные параметры, так и просто указывать значения аргументов в порядке их следования в соответствующем вызываемом методе. Следующие вызовы эквивалентны:

zfc.sh generate migration --module=menu

zfc.sh generate migration menu

Создание миграций с использованием Zend_Tool

# создание пустой миграции
~$ ./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

Применение и откат миграций с использованием Zend_Tool

# 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>

Ссылки