通过命令创建迁移时,doctrine:migrations:diff
我得到一个之后无法执行的迁移。
我有以下情况:
我有 2 个实体 (parent
和child
)many to many
彼此之间存在关系。于是教义为它生成了一个映射表parents_childs
。目前这两个实体具有id
as 整数,现在我想将类型更改为 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 是否无法正确识别外键,或者我做错了什么?