我有一个实体“电影”,它通过教条注释有一个独特的约束。基于电影实体,我自动生成了一个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;
..
答案 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")