Fork me on GitHub

Extended Migration Command

Данное расширение — расширенная версия миграций Yii, которая добавляет поддержку модулей и некоторые дополнительные возможности. Если у вас есть пожелания или вы нашли ошибки, пишите в трекер проекта или напрямую автору (по-английски).

Возможнсти

  • Поддержка модулей (миграции в отельных директориях для каждого модуля), а именно:
    • ...включение и выключение модулей
    • ...добавить новый модуль через migrate up
    • ...удалить модуль через migratie down
    • ...выбрать модули для которых будут применены миграции
    • ...зависимости модулей (в планах)
    • ...различные шаблоны для миграций различных модулей (в планах)

Ссылки

Требования

  • Yii 1.1.6 и выше (именно в этой версии появились миграции) если вы скопируете MigrateCommand и CDbMigration, то сможете использовать данное расширение с любой версией Yii.

Установка

  • Распаковать в protected/extensions.
  • Добавить следующее в конфиг:
'commandMap' => array(
        'migrate' => array(
            // псевдоним директории, в которую распаковано расширение
            'class' => 'application.extensions.yiiext.commands.migrate.EMigrateCommand',
            // путь для хранения общих миграций
            'migrationPath' => 'application.db.migrations',
            // имя таблицы с версиями
            'migrationTable' => 'tbl_migration',
            // имя псевдомодуля для общих миграций. По умолчанию равно "core".
            'applicationModuleName' => 'core',
            // определяем все модули, для которых нужны миграции  (в противном случае, модули будут взяты из конфигурации Yii)
            'modulePaths' => array(
                'admin'      => 'application.modules.admin.db.migrations',
                'user'       => 'application.modules.user.db.migrations',
                'yourModule' => 'application.any.other.path.possible',
                // ...
            ),
            // можно задать имя поддиректории для хранения миграций в директории модуля
            'migrationSubPath' => 'migrations',
            // отключаем некоторые модули
            'disabledModules' => array(
                'admin', 'anOtherModule', // ...
            ),
            // название компонента для подключения к базе данных
            'connectionID'=>'db',
            // алиас шаблона для новых миграций
            'templateFile'=>'application.db.migration_template',
        ),
    ),

Важно: если вы уже использовали MigrateCommand, необходимо добавить столбец module в таблицу версий migrationTable:

ALTER TABLE `tbl_migration` ADD COLUMN `module` varchar(32) DEFAULT NULL;
 UPDATE `tbl_migration` SET module='core';

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

Обычное использование

Для просмотра всех доступных параметров и коротких примеров по использованию можно воспользоваться yiic migrate help.

Основы работы с миграциями описаны в официальном руководстве. Если вы не использовали миграции до этого момента, стоит начать именно с него. Использование расширенной версии не сильно отличается от обычной. Единственная отличная команда — это create, для которой требуется указание имя модуля:

   yiic migrate create modulename create_user_table

Команда, приведённая выше создаёт миграцию 'create_user_table' в модуле 'modulename'. Обычное использование

   yiic migrate create create_user_table

создаёт общую миграцию 'create_user_table' (в псевдомодуле core).

Параметр --module

Во всех остальных командах (up, down, history, new, to и mark) можно использовать параметр --module=<modulenames>, где <modulenames> — разделённый запятыми список имён модулей, либо просто имя модуля. Данный параметр позволяет ограничить действие команды определёнными модулями. Примеры:

   yiic migrate new --module=core

Покажет все общие миграции (для модуля core).

   yiic migrate up 5 --module=core,user

Применит пять миграций в модулях core и user. Миграции остальных модулей будут проигнорированы.

   yiic migrate history --module=core,user

Покажет, какие миграции применены к модулям core и user. Если не указать модуль, команда ведёт себя как та, что включена в Yii за тем исключением, что применяется ещё и ко всем модулям.

Добавление модуля

Просто подключите модуль в файле конфигурации и запустите yiic migrate up --module=yourModule.

Удаление модуля

Запустите yiic migrate to m000000_000000 --module=yourModule. Для этого все миграции должны реализовывать метод down().

Changelog

Changelog

0.8.0 (to be released)

  • Enh: #12 added customization of 'migrations' subdirectory via $migrationSubPath (cebe thanks to redguy666)

0.7.1 (2012-01-31)

  • fix for getTable trying to hit a db cache and die in endless loop (cebe)
  • made sure that mark and to action are working correctly (cebe)

0.7.0 (2012-01-28)

  • adjusted sql commands to be compatible with nearly all pdo db systems (cebe)
  • modules are now loaded from yii application config if not set (cebe)
  • improved create action error handling (cebe)

0.6.0 (2011-09-12) not released, did not work

  • adjusted sql commands to be compatible with sqlite and postgres (cebe thanks to redguy)
  • added compatibility with CDbMigration, migrations need not extend EDbMigration (cebe)

0.5.0 (2011-08-09)

  • implemented mark-action so it now works with modules (cebe)
  • implemented to-action so it now works with modules (cebe)
  • fixed problem that base-migrations where not cretated on mark command (cebe)

0.4.0 (2011-08-08)

  • added confirm() method to EDbMigration (cebe)

0.3.1 (2011-08-05)

  • fixed a problem with finding new migrations (cebe)
  • added base migration for every single module (cebe)
  • fixed problem with history and down migration when --module parameter is set (cebe)
  • added $moduleDelimiter property and replaced string function with multibyte versions (cebe)
  • complete refactoring of basic functionality, more stability and more straight forward (cebe)

0.1.0 (2011-08-04)

  • Initial public release (cebe)
  • module support for migrations
  • extended execute() of CDbMigration with parameter $verbose

This is an enhanced version of the Yii Database Migration Tool that adds module support and many more usefull features.

Documentation

Downloads (Tags)

Resources