проблема с миграцией

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
[email protected]
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

проблема с миграцией

Сообщение [email protected] »

Код: Выделить всё

if ($this->db->driverName === 'mysql') {
           $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
        }

        $this->createTable('{{%reviews}}', [
            'id' => $this->primaryKey(11),
            'program_id' => $this->integer(7),
            'title' => $this->string(255)->notNull(),
            'status' => $this->smallInteger(1)->null()->defaultValue(null)
        ], $tableOptions);
    }
    

Код: Выделить всё

  $this->createTable('{{%programs}}', [
            'id' => $this->primaryKey(7),
            'name' => $this->string(256)->notNull(),
            'link' => $this->string(256)->notNull()   
        ], $tableOptions);
        

Код: Выделить всё


   // creates index for column `id`
        $this->createIndex(
            'idx-program_id',
            '{{%programs}}',
            'id'
        );
        
        // creates index for column `id`
        $this->createIndex(
            'idx-review_id',
            '{{%reviews}}',
            'id'
        );

        // add foreign key for table `{{%programs}}`
        $this->addForeignKey(
            'fk-id-program_id-reviews',
            '{{%programs}}',
            'id',
            '{{%reviews}}',
            'program_id',
            'CASCADE'
        );
        

вылетает ошибка

Код: Выделить всё

  > add foreign key fk-id-program_id-reviews: {{%programs}} (id) references {{%reviews}} (program_id) ...Exception: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
The SQL being executed was: ALTER TABLE `programs` ADD CONSTRAINT `fk-id-program_id-reviews` FOREIGN KEY (`id`) REFERENCES `reviews` (`program_id`) ON DELETE CASCADE (C:\OSPanel\domains\zummer.local\vendor\yiisoft\yii2\db\Schema.php:664)
[email protected]
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: проблема с миграцией

Сообщение [email protected] »

Да и почему он не отменяет транзакцию если миграция сломалась ? оборачиваю в метод saveUp()
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: проблема с миграцией

Сообщение ElisDN »

ForeignKey ставят наоборот с program_id на id.

Транзакции на изменения таблиц не откатываются в MySQL.
[email protected]
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: проблема с миграцией

Сообщение [email protected] »

спасибо

Код: Выделить всё

 /*
    // Use safeUp/safeDown to run migration code within a transaction
    public function safeUp()
    {
    }

    public function safeDown()
    {
    }
    */
    
зачем этот метод если он не оборачивается в транзакцию и не откатывается в случае ошибки ? приходится руками удалять то что она насоздавала до ошибки ? есть разумный способ использовать прелесть транзаций и не боль ?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: проблема с миграцией

Сообщение ElisDN »

[email protected] писал(а): 2019.05.25, 11:38 зачем этот метод если он не оборачивается в транзакцию и не откатывается в случае ошибки? приходится руками удалять то что она насоздавала до ошибки ?
Он оборачивает. Проблема именно в MySQL, в которой транзакция умеет откатить только данные по INSERT, UPDATE и DELETE. А запросы на изменения схемы (таблиц, ключей и ограничений) автоматически коммитят транзакцию и откат уже не срабатывает.
[email protected] писал(а): 2019.05.25, 11:38 есть разумный способ использовать прелесть транзаций и не боль ?
Есть. Использовать PostgreSQL, где транзакции работают на все запросы.
[email protected]
Сообщения: 536
Зарегистрирован: 2016.09.05, 23:21

Re: проблема с миграцией

Сообщение [email protected] »

Спасибо)
Ответить