gpt4 book ai didi

Symfony2 UniqueConstraint 和 UniqueEntity(违反完整性)

转载 作者:行者123 更新时间:2023-12-04 12:23:35 24 4
gpt4 key购买 nike

几天来,我遇到了一个 Doctrine 实体的小问题。我在两个字段上使用 UniqueConstraint 定义它,然后在这两个字段上使用 UniqueEntity 验证。但是在通过添加一个已经在 base 中的实体来验证我的表单之后,无法在我的表单中获取我的错误消息。

只是来自 Symfony 的错误消息:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '339057986-00012' for key 'SIRET'



这是我的实体声明,对我来说一切都很好,但也许我忘记或误解了什么?

<?php

namespace Proetco\FrontBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;

/**
* Proetco\FrontBundle\Entity\Entreprise
*
* @ORM\Table(name="entreprise", uniqueConstraints={@ORM\UniqueConstraint(name="SIRET", columns={"SIREN", "NIC"})})
* @ORM\Entity(repositoryClass="Proetco\FrontBundle\Entity\EntrepriseRepository")
* @UniqueEntity(fields={"SIREN","NIC"}, message="Cette entreprise est déjà enregistrée")
*/
class Entreprise {

protected $Siret;

/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string $SIREN
*
* @ORM\Column(name="SIREN", type="string", length=9)
*/
private $SIREN;

/**
* @var string $NIC
*
* @ORM\Column(name="NIC", type="string", length=5)
*/
private $NIC;

/**
* @var string $RS
*
* @ORM\Column(name="RS", type="string", length=45, nullable=true)
*/
private $RS;

/**
* @var string $NCOM
*
* @ORM\Column(name="NCOM", type="string", length=45, nullable=true)
*/
private $NCOM;

/**
* @var string $CPOS
*
* @ORM\Column(name="CPOS", type="string", length=5, nullable=true)
*/
private $CPOS;

/**
* @var string $LCOM
*
* @ORM\Column(name="LCOM", type="string", length=45, nullable=true)
*/
private $LCOM;

/**
* @var string $INSEE
*
* @ORM\Column(name="INSEE", type="string", length=5, nullable=true, nullable=true)
*/
private $INSEE;

/**
* @var string $DEP
*
* @ORM\Column(name="DEP", type="string", length=2)
*/
private $DEP;

/**
* @var string $ARR
*
* @ORM\Column(name="ARR", type="string", length=1, nullable=true)
*/
private $ARR;

/**
* @var string $CAN
*
* @ORM\Column(name="CAN", type="string", length=2, nullable=true)
*/
private $CAN;

public function getSiret()
{
return $this->Siret;
}

public function setSiret($Siret)
{
$this->Siret = $Siret;
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set SIREN
*
* @param string $sIREN
*/
public function setSIREN($sIREN)
{
$this->SIREN = $sIREN;
}

/**
* Get SIREN
*
* @return string
*/
public function getSIREN()
{
return $this->SIREN;
}

/**
* Set NIC
*
* @param string $nIC
*/
public function setNIC($nIC)
{
$this->NIC = $nIC;
}

/**
* Get NIC
*
* @return string
*/
public function getNIC()
{
return $this->NIC;
}

/**
* Set RS
*
* @param string $rS
*/
public function setRS($rS)
{
$this->RS = $rS;
}

/**
* Get RS
*
* @return string
*/
public function getRS()
{
return $this->RS;
}

/**
* Set NCOM
*
* @param string $nCOM
*/
public function setNCOM($nCOM)
{
$this->NCOM = $nCOM;
}

/**
* Get NCOM
*
* @return string
*/
public function getNCOM()
{
return $this->NCOM;
}

/**
* Set CPOS
*
* @param string $cPOS
*/
public function setCPOS($cPOS)
{
$this->CPOS = $cPOS;
}

/**
* Get CPOS
*
* @return string
*/
public function getCPOS()
{
return $this->CPOS;
}

/**
* Set LCOM
*
* @param string $lCOM
*/
public function setLCOM($lCOM)
{
$this->LCOM = $lCOM;
}

/**
* Get LCOM
*
* @return string
*/
public function getLCOM()
{
return $this->LCOM;
}

/**
* Set INSEE
*
* @param string $iNSEE
*/
public function setINSEE($iNSEE)
{
$this->INSEE = $iNSEE;
}

/**
* Get INSEE
*
* @return string
*/
public function getINSEE()
{
return $this->INSEE;
}

/**
* Set DEP
*
* @param string $dEP
*/
public function setDEP($dEP)
{
if (!isset($this->DEP))
$this->DEP = '02';
$this->DEP = $dEP;
}

/**
* Get DEP
*
* @return string
*/
public function getDEP()
{
if (!isset($this->DEP))
$this->DEP = '02';
return $this->DEP;
}

/**
* Set ARR
*
* @param string $aRR
*/
public function setARR($aRR)
{
$this->ARR = $aRR;
}

/**
* Get ARR
*
* @return string
*/
public function getARR()
{
return $this->ARR;
}

/**
* Set CAN
*
* @param string $cAN
*/
public function setCAN($cAN)
{
$this->CAN = $cAN;
}

/**
* Get CAN
*
* @return string
*/
public function getCAN()
{
return $this->CAN;
}

public function retrieveSiren($siret)
{
return substr($siret, 0, 9);
}

public function retrieveNic($siret)
{
return substr($siret, -5, 5);
}

//contraintes de validation
//TODO : valider les champs avec Regex

public function isSIREN()
{

}

public function isNIC()
{

}

}

最佳答案

在这里回复已经太晚了,但仍然回复以便它可以帮助其他陷入同样问题的人。

两件事情

  • UniqueConstraint除非您想从实体生成架构更改查询,否则不需要。
  • UniqueEntity是你所需要的。


  • 简答

    问题中的实体定义看起来不错,我认为可能存在以下两个问题之一。
  • 您已添加 fields={"SIREN","NIC"}这意味着它们在一起是独一无二的,但您可能希望它们单独独一无二
  • 或者你可能没有验证实体,我认为这是极不可能的,但我仍然想被检查https://symfony.com/doc/current/validation.html#using-the-validator-service

  • 下面详细解释

    请注意,我删除了 , uniqueConstraints={@ORM\UniqueConstraint(name="SIRET", columns={"SIREN", "NIC"})}来自 @ORM/Table注释(因为不需要 UniqueConstraint,除非您想从实体中生成模式定义)

    <?php

    namespace Proetco\FrontBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    use Symfony\Component\Validator\Constraints as Assert;

    /**
    * Proetco\FrontBundle\Entity\Entreprise
    *
    * @ORM\Table(name="entreprise")
    * @ORM\Entity(repositoryClass="Proetco\FrontBundle\Entity\EntrepriseRepository")
    * @UniqueEntity(fields={"SIREN","NIC"}, message="Cette entreprise est déjà enregistrée")
    */
    class Entreprise {
    /**
    * Body of entity
    */
    }

    还有 fields={"SIREN","NIC"}这意味着您希望这两列一起是唯一的
    如果您希望它们中的每一个都独一无二,那么您需要两个 UniqueEntity
    像下面这样

    /**
    * @ORM\Table(name="entreprise")
    * @ORM\Entity(repositoryClass="Proetco\FrontBundle\Entity\EntrepriseRepository")
    * @UniqueEntity(fields={"SIREN"}, message="Cette entreprise est déjà enregistrée")
    * @UniqueEntity(fields={"NIC"}, message="Cette entreprise est déjà enregistrée")
    */

    完成上述设置后,您将需要验证实体并处理表单中的错误

    关于Symfony2 UniqueConstraint 和 UniqueEntity(违反完整性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11115849/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com