Автоматизированная миграция Doctrine не распознает ограничения внешнего ключа

При создании миграции с помощью команды doctrine:migrations:diff Я получаю миграцию, которая не может быть выполнена впоследствии.

У меня есть следующий сценарий:
Я получил 2 энтузиаста (parent а также child) с many to many отношения друг с другом. Таким образом, доктрина создала таблицу сопоставления для него parents_childs, В настоящее время эти 2 entiteis имеют id как целое число, теперь я хочу изменить тип на bigint,

Когда я создаю миграцию, я получаю что-то вроде этого:

$this->addSql('ALTER TABLE child CHANGE id id BIGINT UNSIGNED NOT NULL');
$this->addSql('ALTER TABLE parent CHANGE id id BIGINT UNSIGNED NOT NULL');
$this->addSql('ALTER TABLE parents_childs CHANGE parent_id parent_id BIGINT UNSIGNED NOT NULL, CHANGE child_id child_id BIGINT UNSIGNED NOT NULL');

О выполнении миграций:

SQLSTATE [HY000]: общая ошибка: 1025 Ошибка при переименовании "./symfony_dev/#sql-379_34" в "./symfony_dev/oauth_client" (номер ошибки: 150)

SHOW ENGINE INNODB STATUS ; дает мне следующее сообщение об ошибках ограничения:

------------------------ ПОСЛЕДНЯЯ ОШИБКА ИНОСТРАННЫХ КЛЮЧЕЙ ----------------------- 150218 14:28:19 Ошибка в ограничении внешнего ключа таблицы my_db/parent_childs: в ссылочной таблице нет индекса, который бы содержал столбцы в качестве первых столбцов, или типы данных в ссылочной таблице не совпадают с типами данных в указанной таблице. Таблица. Ограничение:, CONSTRAINT "FK_98FFA0B4D395B25E" FOREIGN KEY ("parent_id") ССЫЛКИ "parent" ("id") Индекс внешнего ключа в таблице - "PRIMARY" См. http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html для правильного определения внешнего ключа.

Определение родительского объекта:

AcmeBundle\Entity\Parent:
    type: entity
    table: parent
    id:
        id:
            type: bigint
            unique: true
            nullable: false
            generator:
                strategy: CUSTOM
            customIdGenerator:
                class: 'MyCustomIdGenerator'
            options:
                unsigned: true
    fields: ...
    manyToMany:
        parents:
            targetEntity: AcmeBundle\Entity\Childs
            joinTable:
                name: parents_childs
                joinColumns:
                    parent_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    child_id:
                        referencedColumnName: id
                        unique: true
            cascade: [remove, persist]
            orphanRemoval: true
            inversedBy: parents

Определение дочернего объекта:

AcmeBundle\Entity\Child:
    type: entity
    table: child
    id:
        id:
            type: bigint
            unique: true
            nullable: false
            generator:
                strategy: CUSTOM
            customIdGenerator:
                class: 'MyCustomIdGenerator'
            options:
                unsigned: true
    fields: ...
    manyToMany:
        parents: 
            targetEntity: AcmeBundle\Entity\Parent
            mappedBy: parents

Сбрасывание внешних ключей, выполнение обновлений и добавление их снова будет работать, хотя на самом деле я не хочу делать это вручную, потому что это также влияет на гораздо большее количество таблиц.
Так что я теперь не уверен, что Doctrine просто не в состоянии правильно определить внешние ключи или я что-то не так делаю?

0 ответов

Другие вопросы по тегам