Как можно в миграции делать проверки существования таблиц и индексов перед их созданием?

Например, в up идет создание нескольких таблиц с индексами. Часть отрабатывает, а потом вываливается по ошибке. Down не сделать, т.к. миграция не отработала целиком и в таблицу не попала. Приходится лезть в базу и откатывать все вручную.

Можно ли сделать проверки, чтобы пропускать при up, то что уже создано?
  • Вопрос задан
  • 536 просмотров
Решения вопроса 1
@melnikov_m
А почему вы не хотите обернуть все в транзакцию?
А проверки на существование можно делать так
const DB_TABLE = '{{%product}}';
 public function up()
    {
        if (Yii::$app->db->schema->getTableSchema(self::DB_TABLE, true) === null) {
            $this->createTable(self::DB_TABLE, [
                'id' => 'int(11) NOT NULL AUTO_INCREMENT COMMENT "Идентификатор"',
                 .............................
                'PRIMARY KEY (id)',
            ], 'ENGINE=InnoDB DEFAULT CHARSET=utf8');
        }
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы