Wiki

Clone wiki

yii-stuff / migration_example

Пример миграции

Пример того, что можно запихнуть в миграцию. Подробней о миграциях

<?php
class m110912_093959_fr_settings extends CDbMigration
{
		public function __construct()
		{
				Yii::app()->db->createCommand('SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;')->execute();
				Yii::app()->db->createCommand('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;')->execute();
				Yii::app()->db->createCommand('SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE="TRADITIONAL";')->execute();
		}
		public function __destruct()
		{
				Yii::app()->db->createCommand('SET SQL_MODE=@OLD_SQL_MODE;')->execute();
				Yii::app()->db->createCommand('SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;')->execute();
				Yii::app()->db->createCommand('SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;')->execute();
		}
		public function safeUp()
		{
				$this->_checkTables();

				$this->createTable('_fr_settings',
						array(
								'id' => 'int(11) NOT NULL AUTO_INCREMENT', // auto increment
								....
								'create_time' => 'int(11) NULL DEFAULT NULL',
								'update_time' => 'int(11) NULL DEFAULT NULL',
								'PRIMARY KEY (`id`)', // primary item
						),
						'ENGINE=InnoDB');
		}

		private function _checkTables ()
		{
				$tables = array('_fr_settings');
				$table_names = $this->getDbConnection()->getSchema()->getTableNames();
				foreach ($tables as $table) {
						if (in_array($table, $table_names)) {
								$this->dropTable($table);
						}
				}
		}

		public function safeDown()
		{
				$this->_checkTables();
		}
}
?>

Автор примера: R.K.

Updated