Symfony @对于简单的字符串属性,Uniquentity不适用于我

Symfony @对于简单的字符串属性,Uniquentity不适用于我,symfony,doctrine,unique-constraint,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

我有一个“公司”实体,有三个字段: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'
我不知道为什么,@uniquentity没有显示我的错误消息。我还试着写这行:@uniquentity(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;
}

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

此语法适用于我:
@uniquentity(“name”,message=“form.error.name.unique”)

清除缓存,清除APC缓存并尝试再次添加此实体。是否提供更多代码?(呈现表单和控制器的模板片段)在更新架构之前是否从表中删除了以前创建的索引键?您还需要通过将
@ORM\table(…)
更改为
@ORM\table(name=“companys”,uniqueConstraints={*@ORM\UniqueConstraint来定义唯一的约束索引名称(name=“New_Unique_Indxes_name”,columns={“name”})
您的问题中可能暗示了这一点,但您是否确实在验证控制器中的实体?
/**
 * 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;
}