2011-09-19 52 views
0

我有一個實體「電影」,它通過原則註釋具有唯一的約束。基於電影實體,我已經自動生成了一個CRUD圖層。當我現在嘗試添加新電影時,我收到以下例外情況:Symfony2有唯一約束的驗證異常

只有通過Doctrine映射的字段名稱才能驗證唯一性。

當約束被刪除時,一切正常。有人知道問題出在哪裏,我該如何解決?

我的猜測是實體,因爲它是新的,不與EntityManager同步,因此無法檢查約束。我很親密嗎?

我使用Symfony 2.0.1與Doctrine 2.1.1,MySQL作爲數據庫。

感謝,
-lony

「電影」 實體:

/** 
* @ORM\Table() 
* @ORM\Entity 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type", type="string") 
* @ORM\DiscriminatorMap({"movie" = "Movie", "series" = "Series"}) 
* 
* @DoctrineAssert\UniqueEntity("title_orginal") 
*/ 
class Movie { 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $titleOrginal 
    * 
    * @ORM\Column(name="title_orginal", type="string", length=255, unique="true") 
    */ 
    private $titleOrginal; 

    .. 
+0

所以呢?你解決了你的問題嗎? – greg0ire

回答

3

你的語法是錯誤的。 使用此:

@DoctrineAssert\UniqueEntity(fields={"title_orginal"}) 

,而不是

@DoctrineAssert\UniqueEntity("title_orginal") 

然後,您可以自定義這樣的違章消息:

@DoctrineAssert\UniqueEntity(fields={"title_orginal", message="my.custom.message"}) 

和翻譯通過使用validators.xliff文件這個消息(它必須是這樣命名)。 我告訴你這一點,因爲我前幾天掙扎着,不得不去調試才發現這個validators.xliff命名約定。

+0

沒有@?所以如果它不是註釋還有什麼? – lony

+0

用'@'當然。對不起,錯字。我將您的原始代碼添加到我的文章中,以便您可以更輕鬆地發現差異。 – greg0ire

3

我覺得有一個小錯字:

@DoctrineAssert\UniqueEntity(fields={"title_orginal", message="my.custom.message"}) 

應該是:

@DoctrineAssert\UniqueEntity(fields={"title_orginal"}, message="my.custom.message") 

和幾個領域

@DoctrineAssert\UniqueEntity(fields={"title_orginal", "field2"}, message="my.custom.message")