两个字段的Symfony UniqueEntity不起作用

时间:2016-12-02 10:18:43

标签: php symfony unique-constraint

我想在字段companyID和personMailaddress上使用Unique实体。 当我在字段中仅使用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;

1 个答案:

答案 0 :(得分: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;