2013-03-27 81 views
1

我使用Symfony2與Doctrine的Annotations在表之間創建引用。在創建表時,它看起來是這樣的:Symfony2 Doctrine Annotations&UNIQ_或FK_定製

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; 

做到這一點的方法是在代碼中創建這些註釋,然後運行:

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,卻看不到任何註釋屬性,將讓我做這個

回答

1

一個小調查後,你可以不定義主鍵和外鍵約束但可以更改唯一約束名稱:

/** 
* @Entity 
* @Table(name="ecommerce_products",uniqueConstraints={ 
*  @UniqueConstraint(name="search_idx", columns={"name", "email"})}) 
*/ 
+0

這就是最少開始,謝謝:)你從哪裏找到的? – Sarel 2013-03-27 12:47:16

+1

http://docs.doctrine-project.org/en/latest/reference/annotations-reference.html#annref-uniqueconstraint – 2013-03-27 13:19:47