2016-03-04 41 views
0

我有一個名爲測試有兩個字段的實體:ID和名稱。 我想要這個名字是唯一的。的Symfony2 - UniqueEntity沒有行動

我做了什麼:

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 

... 

/** 
* Company\AppBundle\Entity\Test 
* 
* @ORM\Table(name="test") 
* @UniqueEntity("name") 
* @ORM\Entity(repositoryClass="Company\AppBundle\Entity\TestRepository") 
* 
*/ 
class Test 
{ 

.... 

/** 
* @var string$name 
* 
* @ORM\Column(name="name", type="string", length=200, nullable=false, unique=true) 
*/ 
private $name; 

.... 

在我的控制,我使用:

if ($form->isValid()) { 
    .... 

但驗證經歷。我錯過了什麼嗎?

+0

是'Test'實體形式的主要實體,或者是它嵌入到你想要的形式驗證? – DonCallisto

+0

@DonCallisto,測試實體是表單的主要實體! –

+0

這是一個錯字'''/ ** * @var integer $ test * * @ORM \ Column(name =「test」,type =「string」,length = 200,nullable = false,unique = true ) */ 私人$測試;'''? – DonCallisto

回答

2

獨特的註解是教義,將其傳遞到數據庫級別和錯誤會從那裏扔。在您嘗試保存之前,它不會知道該實體存在。要做到在PHP你要查詢的唯一屬性自己,檢查它是否存在的檢查...

+0

嗨喬。我同意你的觀點,但嘗試添加重複值時,我得到了'SQLSTATE [23000]:完整性約束違規:1062重複項「AAAA」關鍵「名」' –

+0

這是完全正確的, – DonCallisto

+0

是準確,誤差被拋出數據庫級別,在PHP下。如果您想在實際發生錯誤之前進行檢查,則必須執行手動查詢。 –