Миграции — это очень полезный и удобный инструмент для управления структурой бд, значительно упрощающий командную разработку. В этом посте, я покажу примеры часто используемых миграций: create table, insert, update и add column.
В качестве примера будем использовать таблицу tbl_news:
CREATE TABLE IF NOT EXISTS `tbl_news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(200) CHARACTER SET utf8 NOT NULL,
`content` text CHARACTER SET utf8,
`created_at` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
Создание таблицы с помощью миграции
1. Управлениями миграциями в Yii производится с помощью консольной команды yiic migrate. Для того, чтобы создать нашу первую миграцию, выполним в консоли команду: yiic migrate create create_tbl_news. При вопросе «Create new migration »%path_to_migration%», отвечаем yes. Если все прошло правильно, то в директории protected/migrations должен появиться файл, с примерно таким названием m120302_172329_create_tbl_news.php. Первая часть названия файла это timestamp, вторая это название миграции, которое мы задали.
2. Редактируем созданный файл, в нем будет два метода up() и down(). Для создания таблицы нам нужен будет метод up(). Изменим его содержимое, дописав следующий код:
$this->createTable('tbl_news', array(
'id' => 'pk',
'title' => 'VARCHAR(200) NOT NULL',
'content' => 'text',
));
Полностью файл миграции должен выглядеть так (не забываем, что timestamp у вас будет другой):
class m120302_172329_create_tbl_news extends CDbMigration
{
public function up()
{
$this->createTable('tbl_news', array(
'id' => 'pk',
'title' => 'VARCHAR(200) NOT NULL',
'content' => 'text',
));
}
public function down()
{
echo "m120302_172329_create_tbl_news does not support migration down.\n";
return false;
}
/*
// Use safeUp/safeDown to do migration with transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
3. Теперь, выполним в консоли команду yiic migrate, если все прошло удачно, то видим надпись Migrated up Scuccessfully! В бд должна появиться таблица tbl_news и tbl_migration. Двигаемся дальше.
Добавление записи в таблицу с помощью миграции
1. Выполняем команду: yiic migrate create insert_tbl_news.
2. Редактируем сгенерированный файл с миграцией. Добавляем в метод up() следующий код:
$this->insert('tbl_news', array(
'title' => 'Title 1',
'content' => 'Content 1',
));
3.Выполняем команду yiic migrate.
Изменение записи в таблице с помощью миграции
1. Выполняем команду: yiic migrate create update_tbl_news.
2. Редактируем сгенерированный файл с миграцией. Добавляем в метод up():
$this->update('tbl_news', array(
'title' => 'Updated title'),
'id=1'
);
3.Выполняем команду yiic migrate.
Добавление колонки в таблицу с помощью миграции
1. Выполняем команду: yiic migrate create add_column_tbl_news.
Редактируем сгенерированный файл с миграцией. Добавляем в метод up():
$this->addColumn('tbl_news', 'created_at', 'date');
3. Выполняем команду yiic migrate.
Удаление колонки
1. Выполняем команду: yiic migrate create drop_column_tbl_news.
Редактируем сгенерированный файл с миграцией. Добавляем в метод up():
$this->dropColumn('tbl_news', 'created_at');
3. Выполняем команду yiic migrate.
Вот собственно и все. Подробнее об остальных миграциях можно почитать на официальном сайте.