@UniqueEntity对我来说不适用于简单的字符串属性

时间:2014-05-29 19:02:26

标签: symfony doctrine unique-constraint

我有一个"公司"具有三个字段的实体:id,name和slug。这个名字很独特。

当我尝试创建一个名称已经使用的新公司时,我收到以下错误:

An exception occurred while executing 'INSERT INTO companies (name, slug) VALUES (?, ?)' with params ["test", "test-1"]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test' for key 'UNIQ_8244AA3A5E237E06'

我不知道为什么,但@UniqueEntity没有显示我的错误消息。我也尝试过这一行:@UniqueEntity(fields = {" name"},groups = {" company"})

以下是该类的代码:

<?php
namespace Project\UserBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Company
 *
 * @ORM\Table(name="companies")
 * @UniqueEntity(fields={"name"}, message="form.error.name.unique")
 * @ORM\Entity
 */
class Company
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=50, unique=true)
     * @Assert\NotBlank(message="form.error.name.not_blank");
     * @Assert\Length(min="4", max="50", minMessage="form.error.name.length.min {{ limit }}", maxMessage="form.error.name.length.max {{ limit }}");
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(length=170, unique=true)
     * @Gedmo\Slug(fields={"name"})
     */
    private $slug;

    /**
     * @ORM\OneToMany(targetEntity="Project\UserBundle\Entity\User", mappedBy="company")
     * @Assert\Valid
     */
    private $users;
}

2 个答案:

答案 0 :(得分:0)

你能测试这三种可能性并尝试获取默认消息吗? (但似乎你已经尝试了第三个。也许与其他人一起运气) (顺便说一句,你不能在UniqueEntity注释中设置组选项)

/**
 * User
 *
 * @UniqueEntity("name")
 * @UniqueEntity(fields="name")
 * @UniqueEntity(fields={"name"})
 */
class User
{
     /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", unique=true)
     *
     * @Assert\NotBlank
     */
    private $name;
}

答案 1 :(得分:0)

这个语法对我有用: @UniqueEntity("name", message="form.error.name.unique")