2

我使用了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;

到目前为止一切顺利,正是我所期望的。然后,我对另一个不相关的实体进行了小改动,并尝试运行学说:模式:更新。它对以下字段进行了更改:

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),然后尝试为 unsigned int(10) 创建外键。

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

现在我知道了一些解决方法,所以我可以使用它,我可以将数据库中的字段调整为 Doctrine 想要的,或者使用以下方法关闭外键检查:

SET foreign_key_checks = 0;

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

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

4

0 回答 0