Symfony UniqueEntity для двух полей не работает

Я хочу использовать уникальный объект над полями companyID и personMailaddress.
Когда я использую только personMail в полях, он работает без каких-либо проблем. Но когда я добавляю другое поле в массив, как показано ниже, оно игнорирует мой UniqueEntity.

/**
* person
*
* @ORM\Table(name="person")
* @ORM\Entity(repositoryClass="AppBundle\Repository\personRepository")
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(
*          fields={"personMail", "companyID"},
*          errorPath="personMail",
*          message="ERROR_MAIL_DUPLICATE",
* )
* @Serializer\ExclusionPolicy("all")
*/
class person
{
...
/**
* @ORM\ManyToOne(targetEntity="company", inversedBy="persons")
* @ORM\JoinColumn(name="company", referencedColumnName="id", nullable=true)
*
*/
protected $companyID;

/**
* @var string
*
* @ORM\Column(name="personMail", type="string", length=150)
* @Assert\NotBlank(message="ERROR_MAIL_EMPTY")
*
* @Serializer\Expose
*/
private $personMail;

0

Решение

Для включения уникальности необходимо добавить UniqueEntity валидатор и добавить unique к определению столбца.

<?php
use Doctrine\ORM\Mapping as ORM,
Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity,
Symfony\Component\Validator\Constraints as Assert;

/**
* person
*
* @ORM\Table(name="person")
* @ORM\Entity(repositoryClass="AppBundle\Repository\personRepository")
* @ORM\HasLifecycleCallbacks()
* @UniqueEntity(
*          fields={"personMail", "companyID"},
*          errorPath="personMail",
*          message="ERROR_MAIL_DUPLICATE",
* )
* @Serializer\ExclusionPolicy("all")
*/
class person
{
...
/**
* @ORM\Column(name="companyId", type="integer", unique=true)
* @ORM\ManyToOne(targetEntity="company", inversedBy="persons")
* @ORM\JoinColumn(name="company", referencedColumnName="id", nullable=true)
*
*/
protected $companyID;

/**
* @var string
*
* @ORM\Column(name="personMail", type="string", length=150,  unique=true)
* @Assert\NotBlank(message="ERROR_MAIL_EMPTY")
*
* @Serializer\Expose
*/
private $personMail;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]