2

通过命令创建迁移时,doctrine:migrations:diff我得到一个之后无法执行的迁移。

我有以下情况:
我有 2 个实体 (parentchild)many to many彼此之间存在关系。于是教义为它生成了一个映射表parents_childs。目前这两个实体具有idas 整数,现在我想将类型更改为 a 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/parents_childs 的外键约束出错:引用表中没有包含作为第一列的列的索引,或者引用表中的数据类型与中的数据类型不匹配桌子。约束: , CONSTRAINT "FK_98FFA0B4D395B25E" FOREIGN KEY ("parent_id") REFERENCES "parents" ("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 是否无法正确识别外键,或者我做错了什么?

4

0 回答 0