yii2 — миграции

В Yii 2 есть механизм миграций. По сути миграции в БД это изменение структуры.
Пример использования:

php yii migrate/create create_tv_table
php yii migrate

Создание миграций:

yii migrate/create

name – параметр принимающий имя миграции

После выполнения команды будет создан класс:

class m141018_180924_18102014 extends Migration
{
public function up()
{

}

public function down()
{
echo "m141018_180924_18102014 cannot be reverted.\n";

return false;
}
}

В метод up() содержится код, который должен быть выполнен при накатывании миграции. В методе down() содержится код, который выполнится при откате миграции. Пример миграции:

class m141018_180924_18102014 extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB';
}

$this->createTable('{{%category}}', [
'id' => Schema::TYPE_PK,
'title' => Schema::TYPE_STRING . ' NOT NULL',
], $tableOptions);

$this->createTable('{{%post}}', [
'id' => Schema::TYPE_PK,
'title' => Schema::TYPE_STRING . ' NOT NULL',
'anons' => Schema::TYPE_TEXT . ' NOT NULL',
'content' => Schema::TYPE_TEXT . ' NOT NULL',
'category_id' => Schema::TYPE_INTEGER,
'author_id' => Schema::TYPE_INTEGER,
'publish_status' => "enum('" . Post::STATUS_DRAFT . "','" . Post::STATUS_PUBLISH . "') NOT NULL DEFAULT '" . Post::STATUS_DRAFT . "'",
'publish_date' => Schema::TYPE_TIMESTAMP . ' NOT NULL',
], $tableOptions);

$this->createIndex('FK_post_author', '{{%post}}', 'author_id');
$this->addForeignKey(
'FK_post_author', '{{%post}}', 'author_id', '{{%user}}', 'id', 'SET NULL', 'CASCADE'
);

$this->createIndex('FK_post_category', '{{%post}}', 'category_id');
$this->addForeignKey(
'FK_post_category', '{{%post}}', 'category_id', '{{%category}}', 'id', 'SET NULL', 'CASCADE'
);
}

public function down()
{
$this->dropTable('{{%post}}');
$this->dropTable('{{%category}}');
}
}

Данная миграция создаёт две таблицы и два внешних ключа.

Для создания таблицы используется метод createTable() принимающий два обязательных параметра, имя таблицы и масив описывающий свойства полей таблицы.

Для создания внешних ключей используются методы createIndex() для создания индекса, принимающий три параметра: имя индекса, имя таблицы и имя поля. И метод addForeignKey() принимающий семь параметров: имя внешнего ключа, имя таблицы и имя поля к которой добавляется ключ, имя таблицы и имя поля на которые ссылается ключ, стратегии при удалении и обновлении.

Для применения миграций используется команда:

yii migrate

Для применения нескольких миграций используется команда:

yii migrate/up 2

где 2 – число применяемых миграций

Для применения определённой версии миграции используется команда:

yii migrate/to 141018_180924

где 141018_180924 – timestamp миграций

Команда для отката миграции

yii migrate/down [step]

[step] – количество отменяемых миграций

Для повторного применения миграции применяется команда

yii migrate/redo [step]

[step] – количество повторно применяемых миграций

Просмотр примененных миграций:

yii migrate/history [limit]

[limit] – количество выводимых записей

Просмотр списка новых миграций, которые ещё не были применены:

yii migrate/new [limit]

[limit] – количество выводимых записей

Добавить комментарий