2015-01-31 18 views
10

Come posso verificare che il valore dato esiste nel campo Doctrine Collection (ManyToMany relation)?Doctrine2: controlla se esiste il valore in Doctrine Collection

Per esempio cerco di:

$someClass = $this-> 
      getDoctrine()-> 
      getRepository('MyBundle:MyClass')-> 
      find($id); 

if (!$entity->getMyCollectionValues()->get($someClass->getId())) { 

    $entity->addMyCollectionValue($someClass); 

} 

Ma è, naturalmente, non è corretto. Quindi, come evitare le chiavi duplicate?

risposta

23

Si potrebbe fare:

$object = $this->getDoctrine()->getRepository('MyBundle:MyClass')->find($id); 

if (!$entity->getMyCollectionValues()->contains($object)) { 
    $entity->addMyCollectionValue($object); 
} 

si poteva guardare le funzioni disponibili di Dottrina ArrayCollection in http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html

+0

Oh, grazie! Funziona bene! – spiil

+2

Esiste un modo per controllare Doctrine senza eseguire un'altra query all'inizio per recuperare l'oggetto che stiamo cercando, quando abbiamo già l'id di quell'oggetto? Perché non posso chiedere alla collezione se ha una voce con quell'identificativo? Non sto bene con l'aggiunta di un'altra query per questo. – grantwparks

+1

@grantwparks potresti inserire il contiene() all'interno del metodo add se vuoi assicurarti che il controllo avvenga prima di aggiungere. – TheGremlyn

Problemi correlati