В моем Tag
объекте мне нужно избегать создания тега с таким же name
вдоль всех тегов, созданных данным пользователем. Существует отношение «многие к одному» с сущностью User
, названное user
.
Я применяю это ограничение либо в базе данных (используя uniqueConstraints
), либо в проверке формы с помощью UniqueEntity
. Но я не могу понять это предложение в документации Symfony2 об этом ограничении:
Эта обязательная опция - поле (или список полей ), на котором этот
сущность должна быть уникальной. Например, вы можете указать, что оба
поля email и name в примере пользователя выше должны быть уникальными.
Но мне нужно, чтобы name
и user
были уникальными в целом . Это возможно и как? Вот пример неработающего: и имя, и пользователь проверяются на уникальность как единичные поля.
/**
* @ORM\Entity(repositoryClass="Acme\HelloBundle\Repository\TagRepository")
* @ORM\Table(
* name="tag",
* uniqueConstraints={
* @ORM\UniqueConstraint(columns={"name", "user_id"}),
* })
* @UniqueEntity(fields={"name", "user"})
*/
class Tag implements TenantableEntityInterface
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=31)
* @Assert\NotBlank
* @Assert\MaxLength(limit="31")
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="tags")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
}
РЕДАКТИРОВАТЬ : с определением выше форма подтверждает, но я получаю:
SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись
'имя-1' для ключа 'UNIQ_389B7835E237E06A76ED395'.
Создание двух тегов с одинаковым name
и одним и тем же пользователем.