Как заставить миграцию, в которой произошла ошибка, откатывать сделанные изменения в Yii2?

В Yii2 есть встроенный механизм миграций, который позволяет управлять изменениями в базе данных и поддерживать ее актуальность. Метод "up" миграции применяет изменения, а метод "down" откатывает их.

Если возникла ошибка во время выполнения миграции и вы хотите откатить уже произведенные изменения, вам понадобится использовать команду "yii migrate/down". По умолчанию эта команда откатывает только одну последнюю миграцию, но вы также можете указать число миграций для отката.

Например, чтобы откатить последнюю выполненную миграцию, запустите команду:

./yii migrate/down

Если вы хотите откатить несколько миграций, можно указать их количество в аргументе команды:

./yii migrate/down 3

Это откатит три последние выполненные миграции.

Обратите внимание, что при откате миграций важно учесть, что все изменения, сделанные в базе данных после выполнения миграции, будут удалены. Будьте осторожны, чтобы не потерять важные данные.

Кроме того, YII2 предоставляет возможность автоматического отката миграций при возникновении ошибки. Для этого вам нужно установить свойство enableTransaction модели миграции в значение true. Это позволит откатить все изменения базы данных, сделанные в пределах одной миграции, в случае возникновения ошибки.

use yiidbMigration;

class m200101_100000_example_migration extends Migration
{
    public function up()
    {
        $this->db->createCommand("ALTER TABLE `my_table` ADD `my_column` INT")->execute();
    }

    public function down()
    {
        $this->db->createCommand("ALTER TABLE `my_table` DROP COLUMN `my_column`")->execute();
    }
}

Также, если вы делаете изменения в базе данных и хотите проверить, как эти изменения будут влиять на существующие данные, в Yii2 вы можете использовать методы "safeUp" и "safeDown" миграции. Они позволяют откатывать изменения без фактического применения SQL-запросов.

public function safeUp()
{
    // Ваши изменения базы данных
}

public function safeDown()
{
    // Откат изменений базы данных
}

В результате, при возникновении ошибки в "safeUp" или "safeDown", миграция будет откатывать изменения без фактического выполнения SQL-запросов.

Надеюсь, эта информация поможет вам управлять миграциями в Yii2 и откатывать изменения при возникновении ошибок.