MySQL Doctrine2映射:转换和架构:更新更改关键字段属性:错误1005

时间:2013-01-24 17:17:38

标签: mysql doctrine doctrine-orm mysql-error-1005

我使用了doctrine:mapping:convert命令来对使用Doctrine 1构建的现有mysql数据库进行反向工程。原始数据库具有整数键字段,如:

`client_id` int(10) unsigned default NULL,
KEY `FK_activity_client` (`client_id`),

`client_id` int(10) unsigned NOT NULL auto_increment,

创建实体后,我得到的代码如下:

/**
 * @var \Client
 *
 * @ORM\ManyToOne(targetEntity="Client")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="client_id", referencedColumnName="client_id")
 * })
 */
private $client;

/**
 * @var integer
 *
 * @ORM\Column(name="client_id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $clientId;

到目前为止这么好,正是我所期待的。然后我对另一个不相关的实体做了一个小改动,并尝试运行doctrine:schema:update。它对以下字段进行了更改:

ALTER TABLE activity CHANGE client_id client_id INT DEFAULT NULL, ...

ALTER TABLE activity ADD CONSTRAINT FK_AC74095A8DB60186 FOREIGN KEY (client_id) REFERENCES client (client_id);
DROP INDEX UN_client ON client;
ALTER TABLE client CHANGE client_id client_id INT AUTO_INCREMENT NOT NULL, ...

这会将活动client_id更改为unsigned int(11)signed,然后尝试创建unsigned int(10)的外键。

我们看到我们的老朋友Error 1005,这是MySQL最友好的错误消息。

现在我知道了几个变通方法,所以我可以使用它,我可以将数据库中的字段调整为Doctrine想要的内容,或者使用以下命令关闭外键检查:

SET foreign_key_checks = 0;

在这种情况下,这些解决方法很好。我的问题是:

有没有办法让Doctrine使用数据库的字段大小和属性,在实体中记住它们,并且在不需要时不要弄乱它们。这在数据库很大并且与其他应用程序共享时非常重要,这些应用程序对这些属性应该具有自己的要求。

0 个答案:

没有答案