2015-01-31 20 views
10

Jak mogę sprawdzić, czy podana wartość istnieje w polu Doctrine Collection (Relacja ManyToMany)?Doctrine2: sprawdź, czy istnieje wartość w Doctrine Collection

Na przykład próbuję:

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

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

    $entity->addMyCollectionValue($someClass); 

} 

Ale to nie jest oczywiście prawidłowe. Jak uniknąć duplikatów kluczy?

Odpowiedz

23

Można zrobić:

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

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

Można spojrzeć na dostępnych funkcji doktryny ArrayCollection w http://www.doctrine-project.org/api/common/2.1/class-Doctrine.Common.Collections.ArrayCollection.html

+0

Oh, dzięki! To działa dobrze! – spiil

+2

Czy istnieje metoda sprawdzania Doctrine bez wykonywania innego zapytania na początku, aby pobrać obiekt, którego szukamy, kiedy już mamy identyfikator tego obiektu? Dlaczego nie mogę zapytać kolekcji, czy ma wpis o tym identyfikatorze? Nie jestem w porządku z dodaniem do tego innego zapytania. – grantwparks

+1

@Grantwparks można umieścić metodę contains() w metodzie dodawania, jeśli zawsze chcesz się upewnić, że sprawdzanie ma miejsce przed dodaniem. – TheGremlyn

Powiązane problemy