2017-03-16 5 views
0

I -roughly- diese Hierarchie haben: -Lehre select/Filter auf Kinder Sammlungen

class City { 

/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\District", mappedBy="city") 
*/ 
private $districts; 
} 

class District { 

/** 
* @ORM\Column(type="boolean") 
*/ 
private $isRemoved; 

} 

und ich bin versucht, Städte abfragen, aber ich will nicht entfernt Bezirke in der Abfrage anzuzeigen. Meine aktuelle Lösung besteht darin, die Bezirke zu durchlaufen und die entfernten Attribute zu überprüfen und die Bezirke aus dem Rückgabeobjekt zu entfernen.

meine andere Option war das Schreiben einer detaillierten Abfrage von Grund auf mit dem Abfrage-Generator, aber das - obwohl in diesem Fall funktionieren kann - wird exponentiell komplexer, wie die Hierarchie vertieft.

Antwort

0

Scheint mir sehr einfach, vielleicht habe ich nicht gut verstanden, aber wir versuchen Sie es mal

$cities = $em->getRepository('AppBundle:City')->createQueryBuilder('c') 
    ->select('c', 'd') 
    ->leftJoin('c.districts', 'd') 
    ->where('d.isRemoved = 0') 
    ->getQuery()->getResult(); 

dies sollten Sie Städte mit den dazugehörigen Bezirken Sammlungen geben falsche isRemoved zu haben.

hoffe das wird dir helfen.

+0

danke, aber je tiefer die Hierarchie, das Ergebnis in einer einzigen Abfrage wird mühsam. Ich habe mich gefragt, ob es Möglichkeiten gibt, dies zu optimieren. Vielleicht sollte ich eine Repository-Methode implementieren, um Kinder und Kinder von Kindern zu filtern –

Verwandte Themen