我在尝试更新表时遇到问题。我正在尝试运行以下命令:
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
我怎样才能解决我的困境。谢谢。对不起,如果问题不清楚我不能描述超过这个......
答案 0 :(得分:2)
(抱歉,我还不能发表评论) 你检查两个字段是否完全相同? Errno 150一般是由那个错误产生的......
答案 1 :(得分:1)
它是固定的,它是结构上的差异。 Doctrine使用DEFAULT NULL创建列可能是因为它已经在表中有内容并且无法创建FK。
删除所有信息/在列上添加一些哑值并更改DEFAULT解决了问题。
感谢您的支持!