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