Doctrine更新 - Mysql Errno:150

时间:2014-09-16 19:50:44

标签: php mysql symfony doctrine-orm doctrine

我在尝试更新表时遇到问题。我正在尝试运行以下命令:

sudo -u www-data -H ./app/console doctrine:schema:update --dump-sql
ALTER TABLE users ADD CONSTRAINT FK_1483A5E9A35D7AF0 FOREIGN KEY (invitation_id)    REFERENCES Invitation (code);
CREATE UNIQUE INDEX UNIQ_1483A5E9A35D7AF0 ON users (invitation_id);

基于此配置:

#../Entity/Users.php

/**
 * @ORM\OneToOne(targetEntity="Invitation", inversedBy="user")
 * @ORM\JoinColumn(referencedColumnName="code")
 * @Assert\NotNull(message="Your invitation is wrong")
 */
protected $invitation;

#../Entity/Invitations.php

/** @ORM\OneToOne(targetEntity="Users", mappedBy="invitation", cascade={"persist", "merge"}) */
protected $user;

它给了我错误:

[Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE users ADD CONSTRAINT FK_1483A5E9F11D61A2 FOREIGN KEY (invitation) REFERENCES Invitation (code)':
SQLSTATE[HY000]: General error: 1005 Can't create table 'loopanime-mvc.#sql-402_bc3' (errno: 150)

两个表都在InnoDb上,集合是ut8_unicode_ci。我没有尝试运行手动创建索引,因为那不是我想要的!但是为什么地狱不会在FK之前首先创建IDX

我怎样才能解决我的困境。谢谢。对不起,如果问题不清楚我不能描述超过这个......

2 个答案:

答案 0 :(得分:2)

(抱歉,我还不能发表评论) 你检查两个字段是否完全相同? Errno 150一般是由那个错误产生的......

答案 1 :(得分:1)

它是固定的,它是结构上的差异。 Doctrine使用DEFAULT NULL创建列可能是因为它已经在表中有内容并且无法创建FK。

删除所有信息/在列上添加一些哑值并更改DEFAULT解决了问题。

感谢您的支持!