2013-04-24 70 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