Symfony @对于简单的字符串属性,Uniquentity不适用于我
我有一个“公司”实体,有三个字段:id、name和slug。名称是唯一的 当我尝试创建一个名称已被使用的新公司时,出现以下错误: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
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;
}