Skip to content

Latest commit

 

History

History
141 lines (109 loc) · 7.1 KB

readme_ru.md

File metadata and controls

141 lines (109 loc) · 7.1 KB

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().