2013-04-24 63 views
1

我找不到這種寫作方式,我可以理解它的文檔,所以我要問你的幫助。這個問題關係到Unique entity - Symfony2唯一約束 - Symfony2中和Doctrine2

我有一個名爲類別帶有三個字段的表 - IDfos_user_id。 其他表稱爲fos_user,具有領域ID,用戶名等。

我想類別是用戶的唯一。一個用戶不能有兩個名字爲「Food」的類,但所有用戶都可以擁有一個名爲「Food」的類別。

在其他的問題,我勸嘗試這樣的事:

* @ORM\Table(name="categories", 
*   uniqueConstraints={@ORM\UniqueConstraint(name="name_user_id__idx", 
*              columns={"name", "user_id"})}) 

,我想這:

/** 
* @ORM\Entity 
* 
* @ORM\Table(name="category", 
*    uniqueConstraints={@ORM\UniqueConstraint(name="name_user_idx",              
              columns={"name", "fos_user_id"})})) 
* @ORM\Entity(repositoryClass="Acme\BudgetTrackerBundle\Entity\CategoryRepository") 
* @UniqueEntity(fields={"name", "fos_user_id"}, message="There already is such a category.") 
*/ 

,但我得到這個錯誤:

The field 'fos_user_id' is not mapped by Doctrine, so it cannot be validated for uniqueness.

我不能完全理解錯誤。我不明白帶有限制的部分。這是正確的語法和正確的寫作?

非常感謝您提前!

PS:對不起,打開一個新的問題,如果我不應該,但我增加了很多新的東西,決定了新qusetion比編輯舊,並要求在評論更好。

回答

5

對於像類別,用戶關係等......你不應該在列,但在關係使用唯一約束。比如:

代替

@UniqueEntity(fields={"name", "fos_user_id"}) 

嘗試

@UniqueEntity(fields={"name", "user"}) 

其中 「用戶」 是映射場與用戶實體關係的名稱。

+0

我改變了你說什麼,但它仍然不允許兩個用戶具有相同名稱的類別。 – Faery 2013-04-26 06:02:35

+0

從@ORM \ Table定義中移除「uniqueConstraints」。 – Zeljko 2013-04-26 13:13:18

+0

我刪除了它,現在我擁有的是@UniqueEntity(fields = {「name」,「user」})',但現在它不會讓不同的用戶擁有同名的類別。 – Faery 2013-05-15 09:30:56