我正在使用Symfony2和Doctrine的Annotations来创建表之间的引用。创建表时,它看起来像这样:
CREATE TABLE `guardian` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fos_user_id` int(11) NOT NULL,
`first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_644860558C20A0FB` (`fos_user_id`),
CONSTRAINT `FK_644860558C20A0FB` FOREIGN KEY (`fos_user_id`) REFERENCES `fos_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
这样做的方法是在代码中创建这些Annotations,然后运行:
php app/console doctrine:schema:update --force
以下是其中一个参考文献的注释:
/**
* @ORM\OneToOne(targetEntity="SF\UserBundle\Entity\User")
* @ORM\JoinColumn(name="fos_user_id", referencedColumnName="id")
*/
private $fosUser;
正如您从“show create table”中看到的那样;在上面,键的名称和约束是非人类友好的。我猜“UNIQ_644860558C20A0FB”只是“UNIQ_”并随机附加一些内容。
我想做的是实际给出一个正确的名称,例如“UNIQ_fos_user_id”。这样做的原因是,如果你得到如下的错误,很难快速看到发生了什么,问题是哪个关键(特别是如果有多个唯一的或外键:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'UNIQ_644860558C20A0FB'
我查看了文档here,但看不到任何可以让我这样做的注释属性。
答案 0 :(得分:1)
经过一些调查后,您无法定义主键或外键的约束。但是,您可以更改唯一约束名称:
/**
* @Entity
* @Table(name="ecommerce_products",uniqueConstraints={
* @UniqueConstraint(name="search_idx", columns={"name", "email"})})
*/