Помогите, пожалуйста разобраться новичку в Yii2, вроде по документации делаю, но что-то не так.
Пробую посредством миграции добавить таблицу в БД, остальные таблицы создавались ВРУЧНУЮ.
Возможно кто-то пробовал с помощью миграции в рабочую БД(СОЗДАНА ВРУЧНУЮ) добавлять новые таблицы и прописывать к нем Foregn_key?
Типы полей id, из старых таблиц , к которым пытаюсь привязать поля из вновь создаваемой таблицы соответствуют типам полей внешних ключей новой таблицы int(11) , поля, к которым устанавливается связь по внешним ключам проиндексированы и являются первичными ключами в своих таблицах.
Таблица в БД добавляется со всеми прописанными полями и типами как надо, поле для внешнего ключа индексируется, но привязки не происходит.
В таблице миграции соответственно внешних ключей нет, так как на этапе создания ключей происходит ошибка(из терминала):
> add foreign key fk-comment-author_id: {{%comment}} (author_id) references {{%user}} (id) ...Exception: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
The SQL being executed was: ALTER TABLE `comment` ADD CONSTRAINT `fk-comment-author_id` FOREIGN KEY (`author_id`) REFERENCES `user` (`id`) ON DELETE CASCADE (D:\open-server\OSPanel\domains\yii2.loc\vendor\yiisoft\yii2\db\Schema.php:678)
#0 D:\open-server\OSPanel\domains\yii2.loc\vendor\yiisoft\yii2\db\Command.php(1304): yii\db\Schema->convertException().............................................................
В результате выполнения миграции в терминале :
*** failed to apply m210415_065603_create_comment_table (time: 0.644s)
0 from 1 migrations were applied.
Migration failed. The rest of the migrations are canceled.
В createTable методе пробовал типы полей задавать также и с помощью Schema::, но разницы нет.
public function safeUp()
{
$this->createTable('{{%comment}}', [
'id' => $this->primaryKey(),
'author_id' => Schema::TYPE_INTEGER.' NOT NULL',
'text' => $this->text()->notNull(),
'parent_id' => $this->integer(),
'product_id' => $this->integer()->notNull(),
'moderation' => $this->boolean(),
'created' => $this->date(),
'is_admin' => $this->boolean(),
]);
// creates index for column `product_id`
$this->createIndex(
'idx-comment-product_id',
'comment',
'product_id',
);
// add foreign key for table `product` ОШИБКА ПРОИСХОДИТ ВО ВРЕМЯ ЭТОЙ ОПЕРАЦИИ
$this->addForeignKey(
'fk-comment-product_id',
'comment',
'product_id',
'product',
'id',
'CASCADE',
);
// creates index for column `author_id`
$this->createIndex(
'idx-comment-author_id',
'comment',
'author_id'
);
// add foreign key for table `user` ОШИБКА ПРОИСХОДИТ ВО ВРЕМЯ ЭТОЙ ОПЕРАЦИИ
$this->addForeignKey(
'fk-comment-author_id',
'{{%comment}}',
'author_id',
'{{%user}}',
'id',
'CASCADE'
);
}
/**
* {@inheritdoc}
*/
public function safeDown()
{
// drops foreign key for table `user`
$this->dropForeignKey(
'fk-comment-author_id',
'comment',
);
// drops index for column `author_id`
$this->dropIndex(
'idx-comment-author_id',
'comment',
);
// drops foreign key for table `product`
$this->dropForeignKey(
'fk-comment-product_id',
'comment',
);
// drops index for column `product_id`
$this->dropIndex(
'idx-comment-product_id',
'comment',
);
$this->dropTable('{{%comment}}');
}
ВОПРОС ЗАКРЫТ.
Сделал миграции нескольких новых таблиц и сразу прописать поля с внешними ключами между ними, заработало , значит дело в мешанине таблиц из миграции и старых таблиц базы.
Всем , кто принял участие в поиске проблемы, спасибо!