2012-10-26 105 views
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());