Шаблоны миграций в yii2

Для создания миграций в yii2 используется команда php yii migrate/create .... Такая команда создаст в папке migrations файл миграции с 2 пустыми методами: up и down. Однако, в генератор миграций встроены несколько шаблонов, которые упрощают создание миграций. Рассмотрим их:

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

Формат команды: php yii migrate/create create_post_table - создаст таблицу post

Дополнительный код в миграции:

public function safeUp()
{
    $this->createTable('{{%post}}', [
        'id' => $this->primaryKey(),
    ]);
}


public function safeDown()
{
    $this->dropTable('{{%post}}');
}
  • Удаление таблицы базы данных

Формат команды: php yii migrate/create drop_post_table

Дополнительный код в миграции:

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

public function safeDown()
{
    $this->createTable('{{%post}}', [
        'id' => $this->primaryKey(),
    ]);
}
  • Добавление столбца в таблицу

Формат команды: php yii migrate/create add_title_column_to_post_table --fields=title

Дополнительный код в миграции:

public function safeUp()
{
    $this->addColumn('{{%post}}', 'title', $this->);
}

public function safeDown()
{
    $this->dropColumn('{{%post}}', 'title');
}
  • Удаление столбца из таблицы

Формат команды: php yii migrate/create drop_title_column_from_post_table --fields=title

Дополнительный код в миграции:

public function safeUp()
{
    $this->dropColumn('{{%post}}', 'title');
}

public function safeDown()
{
    $this->addColumn('{{%post}}', 'title', $this->);
}
  • Добавление промежуточной таблицы

Формат команды: php yii migrate/create create_junction_table_for_post_and_user_tables

Дополнительный код в миграции:

public function safeUp()
{
    $this->createTable('{{%post_user}}', [
        'post_id' => $this->integer(),
        'user_id' => $this->integer(),
        'PRIMARY KEY(post_id, user_id)',
    ]);

    // creates index for column `post_id`
    $this->createIndex(
        '{{%idx-post_user-post_id}}',
        '{{%post_user}}',
        'post_id'
    );

    // add foreign key for table `{{%post}}`
    $this->addForeignKey(
        '{{%fk-post_user-post_id}}',
        '{{%post_user}}',
        'post_id',
        '{{%post}}',
        'id',
        'CASCADE'
    );

    // creates index for column `user_id`
    $this->createIndex(
        '{{%idx-post_user-user_id}}',
        '{{%post_user}}',
        'user_id'
    );

    // add foreign key for table `{{%user}}`
    $this->addForeignKey(
        '{{%fk-post_user-user_id}}',
        '{{%post_user}}',
        'user_id',
        '{{%user}}',
        'id',
        'CASCADE'
    );
}

/**
 * {@inheritdoc}
 */
public function safeDown()
{
    // drops foreign key for table `{{%post}}`
    $this->dropForeignKey(
        '{{%fk-post_user-post_id}}',
        '{{%post_user}}'
    );

    // drops index for column `post_id`
    $this->dropIndex(
        '{{%idx-post_user-post_id}}',
        '{{%post_user}}'
    );

    // drops foreign key for table `{{%user}}`
    $this->dropForeignKey(
        '{{%fk-post_user-user_id}}',
        '{{%post_user}}'
    );

    // drops index for column `user_id`
    $this->dropIndex(
        '{{%idx-post_user-user_id}}',
        '{{%post_user}}'
    );

    $this->dropTable('{{%post_user}}');
}

Стоит учитывать, что при использовании пространства имен в миграциях, шаблоны для создания дополнительного кода не работают. Решение состоит либо в переопределении метода actionCreate контроллера yii\console\controllers\MigrateController, либо в использовании отдельностоящих миграций (см. подробнее )

{{ message }}

{{ 'Comments are closed.' | trans }}