2

我是Symfony2 + Doctrine的新手,我正在尋找一種方法來驗證Arraycollection中的唯一性。可能它已經回答了問題,但我無法弄清楚它是如何解決的。 I`ve一個Relevamientosserviciosprestador類與回調驗證symfony2中的arraycollection

namespace Prestadores\PrincipalBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\ExecutionContext; 
/** 
* Prestadores\PrincipalBundle\Entity\Relevamientosserviciosprestador 
* 
* @ORM\Table(name="relevServiciosPrestador") 
* @ORM\Entity(repositoryClass="Prestadores\PrincipalBundle\Repository\RelevamientosserviciosprestadorRepository")* 
* @Assert\Callback(methods={"sonUnicosLosTiposDeReclamoq"}) 
*/ 
class Relevamientosserviciosprestador 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 
    .... 
    .... 
    /** 
    * @ORM\OneToMany(targetEntity="Atencionusuarioreclamo", mappedBy="relevamiento_id", cascade={"persist"}) 
    * @Assert\Valid 
    */ 
    private $reclamos;   
    .... 
    .... 
    public function __construct() 
    { 
     $this->personal = new ArrayCollection(); 
     $this->reclamos = new ArrayCollection();   
    } 
    .... 
    .... 
    /*Acá intentaremos validar si los tipos de reclamo que se están cargando son únicos para ese relevamiento*/ 
    public function sonUnicosLosTiposDeReclamoq(ExecutionContext $context) 
    { 
     foreach ($this->reclamos as $reclamo){ 
      /*Here, I get all entities, not only those related to a Relevamientosserviciosprestador*/ 
      var_dump($reclamo->gettiporeclamo()->getnombre()); 
     } 
    } 

} 

而且Atencionusuarioreclamo實體:

namespace Prestadores\PrincipalBundle\Entity; 

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


/** 
* Prestadores\PrincipalBundle\Entity\Atencionusuarioreclamo 
* 
* @ORM\Table(name="atencionUsuarioReclamo") 
* @ORM\Entity 
*/ 
class Atencionusuarioreclamo 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var Atencionusuariosede 
    * 
    * @ORM\ManyToOne(targetEntity="Atencionusuariosede") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="nroSede", referencedColumnName="id") 
    * }) 
    */ 
    private $nrosede; 

    /** 
    * @var relevamiento_id 
    * 
    * @ORM\ManyToOne(targetEntity="Relevamientosserviciosprestador") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="relevamiento_id", referencedColumnName="id") 
    * }) 
    */ 
    private $relevamiento_id; 

    /** 
    * @var Prmreclamotipo 
    * 
    * @ORM\ManyToOne(targetEntity="Prmreclamotipo") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="tipoReclamo", referencedColumnName="id") 
    * }) 
    * @Assert\NotBlank()  
    */ 
    private $tiporeclamo; 
    .... 
    .... 
    .... 
    .... 


} 

我想在一個給定的塞代到仄獨特tiporeclamo and relevamiento_id

創建或使用具有子表單收集​​「Atencionusuarioreclamo」實體形式編輯Relevamientosserviciosprestador。在提交的回調Relevamientosserviciosprestador執行,但$這個 - > reclamos保存的所有實體不僅是那些與Relevamientosserviciosprestador什麼I'm編輯。 這是預期的行爲還是我錯過了某些東西? 我也測試了How to validate unique entities in an entity collection in symfony2 中提到的方法,但它再次檢查所有實體。

我也讀了Doctrine2 ArrayCollection但我不明白它是否能解決問題。
請問,你能告訴我如何在持久化之前管理ArrayCollection中的唯一性?對於提前我的英語很差
感謝
我很抱歉
伊萬

回答

2

php的array array_unique (array $array [, int $sort_flags = SORT_STRING ])

結合ArrayCollection->toArray()ArrayCollection->__construct()

你的情況:

$Atencionusuarioreclamo = 
    new ArrayCollection(array_unique($Atencionusuarioreclamo->toArray());