2016-07-04 7 views
1

Ich habe viele zu viele Beziehung zwischen Instituten und Kurse. Ich möchte Abfrage erstellen, die nur die Institutsliste zurückgibt, denen einige Kurse zugewiesen wurden. Ich habe in dieser Situation Abfragen für one to many geschrieben. aber für nicht many to many. Hier ist die Beziehungen,Symfony Doctrine Query für viele zu viele Reliationships

class Institutes { 

    /** 
    * @ORM\ManyToMany(targetEntity="Courses", inversedBy="institutes") 
    * @ORM\JoinTable(name="institute_courses", 
    *  joinColumns={@ORM\JoinColumn(name="institute_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $courses; 
} 

class Courses { 

    /** 
    * @ORM\ManyToMany(targetEntity="Institutes", mappedBy="courses") 
    */ 
    protected $institutes; 
} 

hier ist die Abfrage, die ich geschrieben habe, aber nicht richtig funktioniert.

$repository->createQueryBuilder('s') 
         ->leftJoin('CoursesBundle:Courses','c', 'ON c.institutes = s.courses') 
         ->where('s.active = :active') 
         ->andWhere('s.verified = :active') 
         ->setParameter('active', true) 
         ->orderBy('s.name', 'ASC'); 
+0

versuchen Sie, den leftJoin durch einen innerJoin zu ersetzen, wenn Sie sicher sein wollen, nur die Institute mit Kursen – jiboulex

Antwort

1

Diese den Trick tun sollten:

+0

Nein, nicht wokring es gibt alle Institute zurück –

+0

Sorry ich bearbeitet, ich habe Ihre Frage falsch gelesen – Terenoth

0

können Sie ein JOIN wie bei anderen Arten von Verbänden verwenden. Die folgende Abfrage wird alle Kurse finden, die zumindest zu einem Institut zugeordnet wurden:

SELECT c FROM SomeBundle:Courses c JOIN c.institutes i 

Sie können die Ergebnisse filtern, indem ein Join-Bedingung hinzu:

SELECT c FROM SomeBundle:Courses c JOIN c.institutes i WITH i.something = :someParam 
+0

zu zielen, muss ich Institut, nicht die Kurse auswählen. –

+0

Hmm. Verpasst das. Ändern Sie dann die Abfrage entsprechend. Ich habe dir schon gezeigt * wie * das zu machen. – ShiraNai7