Я хочу использовать уникальный объект над полями 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;
Для включения уникальности необходимо добавить 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;
Других решений пока нет …