2016-04-13 13 views
1

Ich benutze Doctrine QueryBuilder in Symfony2, um eine Abfrage zum Abrufen von Entitäten zu erstellen.Wie mache ich eine LINKE VERBINDUNG ON oder in Doctrine

Ich versuche, dieses Ergebnis in MySQL zu bekommen:

SELECT u0_.id AS id0 
FROM user u0_ 
LEFT JOIN rva_victims r3_ ON u0_.id = r3_.user_id 
INNER JOIN rva r1_ ON r1_.id = r3_.rva_id or u0_.id = r1_.declarant_id 

ich beide an und mit Condition in $ qb- versucht haben> join(), aber nichts zu arbeiten.

Irgendwelche Ideen, um mein Problem zu lösen?

Antwort

1

Die Lösung sollte ziemlich einfach sein. In Ihrem Fall sollte es so aussehen, you§re in der respository Klasse unter der Annahme:

$this 
    ->createQureyBuilder('u') 
    ->leftJoin(Victims::class, 'v', Query\Expr\Join::WITH, 'v.user = u.id') 
    ->join(Rva::class, 'r', Query\Expr\Join::WITH, 'r.id = v.rva OR u.id = r.declarant'); 

Dies sollte gut funktionieren, ist ich nur unter der Annahme, gerade jetzt die Klassennamen. Beachten Sie auch, dass alle Bedingungen für Klassenattributnamen (DQL) und nicht für Spaltennamen festgelegt sind.

+0

Mein Problem ist, Opfer und Rva sind in der gleichen Einheit zu schaffen. Tatsächlich habe ich meine Rva-Entität, die ein Opfer-Attribut Rva @ ManyToMany ("Benutzer") und ein Anmelder-Attribut Rva @ ManyToOne ("Benutzer") enthält. Ich muss alle Opfer und Anmelder in der gleichen Anfrage erhalten. Mein Problem in Ihrem Join, ist das WITH, denn ich bekomme das Ergebnis: INNER JOIN rva r4_ ON u0_.id = r4_.declarant_id UND (r4_.declarant_id IN (?) ODER u0_.id = r4_.declarant_id) – KeurbyCandy

+0

Kann Bitte aktualisieren Sie die Frage mit den beteiligten Modelldefinitionen? Es wäre klarer, was das Problem ist. –

0

Sie können dies tun, indem Sie eine Query Builder in Entity Repository

$qb = $this->createQueryBuilder('u') 
    ->leftJoin('yourbundle:Entityname', 'ye', 'WITH', 'u0_.id = r3_.user_id') 
    ->innerJoin('yourbuncle:entityname', 'yen', 'WITH', 'r1_.id = r3_.rva_id', 'OR', 'u0_.id = r1_.declarant_id'); 
+0

Ich habe '[Semantischer Fehler] Zeile 0, Spalte 155 nahe 'ODER MIT rvaD.declarant': Fehler: 'ODER' zeigt nicht auf eine Klasse.' – KeurbyCandy

+0

Haben Sie versucht, so 'r1_.id = r3_ eingeben. rva_id ODER u0_.id = r1_.declarant_id '... haben Sie auch die gewünschten Zeilen mit dieser SQL-Abfrage auf dem MySQL-Client bekommen – Sasser

Verwandte Themen