X

Symfony: SQLSTATE[HY000]: General error: 1005 Can't create table (errno: 150)

Ночью не спалось, поэтому решил дописать некоторый функционал в новой версии этого блога. Блог пишу на Symfony, в качестве ORM использую Doctrine. Так вот, столкнулся с ошибкой SQLSTATE[HY000]: General error: 1005 Can't create table 'itrem.#sql-2f3f_2a7' (errno: 150) при обновлении схемы БД..

Полностью ошибка выглядит так:

[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE tags ADD CONSTRAINT FK_6FBC94264B89032C FOREIGN KEY (post_id) REFERENCES posts (id)':
SQLSTATE[HY000]: General error: 1005 Can't create table 'itrem.#sql-2f3f_2a7' (errno: 150)

[PDOException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'itrem.#sql-2f3f_2a7' (errno: 150)

Обычно такая ошибка возникает, когда foreign key и referenced key не совпадают по типу, но в моем случае был обычный маппинг с primary полем, и там все было Ок:

        /**
         * @ORM\ManyToOne(targetEntity="Post", inversedBy="tags")
         * @ORM\JoinColumn(name="post_id", referencedColumnName="id")
         */        protected $post;

Проблему я нашел методом "тыка", при изучении таблиц, я заметил что таблица tags создалась в InnoDB, при этом таблица post была в MyISAM (наследие миграции с windows на linux). Так вот, изменив тип таблицы tags на MyISAM все заработало, апдейт базы сразу же прошел:

$ php app/console doctrine:schema:update --force
Updating database schema...
Database schema updated successfully! "4" queries were executed

Так что, когда будете искать где зарылась проблема, обратите внимание на тип таблиц. Возможно, это так же Ваш случай.