具有唯一约束的Symfony2验证异常

时间:2011-09-19 23:26:17

标签: validation orm doctrine-orm symfony

我有一个实体“电影”,它通过教条注释有一个独特的约束。基于电影实体,我自动生成了一个CRUD图层。当我现在尝试添加新电影时,我得到以下异常:

  

只有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;

  ..

2 个答案:

答案 0 :(得分:3)

你的语法错了。 使用此:

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

而不是

@DoctrineAssert\UniqueEntity("title_orginal")

然后,您可以自定义违规消息:

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

并使用validators.xliff文件翻译此消息(必须以此命名)。 我告诉你这个因为我前几天挣扎了,并且不得不调试以找到这个validators.xliff命名约定。

答案 1 :(得分: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")