Заметки WEB-разработчика

Полезные материалы для web-разработки

Миграции в yii

В этой статье поговорим о миграциях в yii. Что это такое, здесь я рассказывать не буду (в сети масса информации об этом), моя цель - дать примеры и последовательности повседневного использования миграций в yii.

Миграции в yii

Отметим, что миграции доступны в yii с версии 1.1.6

Последовательность действий при создании миграций в yii.

Создаем папку /protected/migrations

Также проверьте настройки соединения с базой данных в protected/config/console.php

Создаем таблицу миграций в базе (здесь будут храниться все выполненные миграции):

CREATE TABLE IF NOT EXISTS `tbl_migration` (
  `version` varchar(255) NOT NULL,
  `apply_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`version`)
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Команды в консоли (в качестве консоли лично я использую Git Bash).

Переходим в каталог проекта (cd project/protected)

Под windows

# создаем миграцию
C:/xampp/php/php.exe yiic migrate create <name>
# применяем миграцию
C:/xampp/php/php.exe yiic migrate up

Под Linux

# создаем миграцию
php yiic migrate create <name>
# применяем миграцию
php yiic migrate up

После выполнения команды php yiic migrate create <name>, в папке /protected/migrations создается файл миграции, в котором собственно мы и будем писать комманды sql

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

Создание таблицы

class m120302_172329_create_tbl_news extends CDbMigration
{
  public function up()
  {
      $this->createTable('el_slider', array(
      'id' => 'pk',
      'title' => 'VARCHAR(200) NOT NULL',
      'desc' => 'text NOT NULL',
      'link' => 'VARCHAR(200) NOT NULL',
      'img' => 'VARCHAR(200) NOT NULL',
      'show' => 'tinyint(1) DEFAULT 1',
      'order' => 'int(10) DEFAULT 0',
      ) , 'ENGINE=InnoDB CHARSET=utf8'); 
  }
  
  public function down()
  {
      dropTable('el_slider');
      return false;
  }

Добавление записи в таблицу с помощью миграции

$this->insert('tbl_news', array(
  'title' => 'Title 1',
  'content' => 'Content 1',
));

Изменение записи в таблице с помощью миграции

$this->update('tbl_news', array(
  'title' => 'Updated title'),
  'id=1'
  );

Добавление колонки в таблицу с помощью миграции

$this->addColumn('el_item_with_partner', 'option_id', 'int(11) DEFAULT 0');

Переименование колонки

$this->renameColumn('{{user}}', 'user_birthday', 'user_old_birthday');

Удаление колонки

$this->dropColumn('tbl_news', 'created_at');

Повторное применение миграций

Повторное примение миграции производится путём последовательного отката и применения. Осуществить это можно следующей командой:

yiic migrate redo [step]

где необязательный параметр step указывает количество миграций, которые необходимо применить ещё раз. По умолчанию повторяется одна последняя миграция.

Просмотр информации о миграциях

Кроме применения и отката миграций, инструмент миграций может отображать историю миграций, а также новые, ещё не применённые миграции:

yiic migrate history [limit]
yiic migrate new [limit]

Здесь параметр limit указывает количество отображаемых миграций. Если limit не указан, показываются все миграции.
Первая команда показывает уже применённые миграции, вторая — миграции, которые ещё не были применены.

И еще, если нет доступа через ssh, то на помощь придет web-shell

Комментарии

Комментарии через Вконтакте