2014-04-01 60 views
0

我有餐廳和類別 - 每個類別有一個餐廳,每個餐廳可以有很多類別。我希望每個餐廳的類別都有唯一的名稱,我希望有人試圖打破這種情況,以獲取表單無效的消息,而不會被模式阻止。所以這是我嘗試:兩列獨特的實體 - Symfony2

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

/** 
* @ORM\Table(name="categories", uniqueConstraints={@ORM\UniqueConstraint(name="name_restaurant_id_idx", columns={"name", "restaurant_id"})})) 
* @ORM\Entity(repositoryClass="MyBundle\Entity\CategoryRepository") 
* @UniqueEntity({"name", "restaurant"}) 
*/ 
class Category 
{ 
    /** @ORM\Column(name="category_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $categoryId; 

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

    /** 
    * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Restaurant") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="restaurant_id", referencedColumnName="restaurant_id", unique=true) 
    * }) 
    */ 
    private $restaurant; 

,但它不工作:(我被架構停止了與

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

我也試過* @UniqueEntity({"name", "restaurant_id"}),但我得到一個錯誤,restaurant_id是不主義映射。

任何想法,爲什麼它的工作不是:(

+0

此問題似乎相關:http://stackoverflow.com/questions/12001753/why-is-my-symfony2-uniqueentity-constraint-not-working-at-all –

+0

謝謝!但我沒有驗證組,也不想創建驗證組。 – Faery

+0

'@UniqueEntity({「name」,「restaurant」})' –

回答

0

我覺得你的問題是,你已經達ta不符合你的新約束。嘗試截斷表並再次更新,或在更新架構之前手動編輯數據以反映新約束。

0

在我自己的UniqueEntity我有一個客戶字段和不得不說是一個獨特的組合的選項字段。客戶是通過請求給控制器設置的,而不是通過表單本身,所以assert不起作用。我能夠通過讓表單呈現客戶,然後在呈現的表單視圖中隱藏該選項來解決問題。