2012-12-13 15 views
10

Hinweis: Dies ist ein ORM Einschränkung reported on the project's issue trackerDoctrine2: Willkürliche beitreten und einzelne Tabelle Vererbung

Ich bin ein Problem mit Blick auf den Aufbau einer DQL Abfrage mit der willkürlichen Syntax in Lehre 2.3 auf einer Entity-Klasse eingeführt beitreten Das ist die Wurzel einer Hierarchie.

Unter diesen Klassen:

A - kein Erbe

B1 - abstrakt, Wurzel einer Hierarchie, Diskriminator Spalte 'Typ' genannt

ich ein Setup Query Builder wie dies:

$qb->select('a.id AS idA, b.id AS idB') 
    ->from('\Entity\A', 'a') 
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something'); 

Und die SQL-Doktrine generiert wird so etwas wie dieses:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3') 

Die Probleme ist, dass die, wo die macht nutzlos kommen gelassen.

Gibt es eine Möglichkeit zu erzwingen, dass die Bedingung auf der Diskriminatorspalte in den Join gesetzt wird? Zumindest würde das ...

Sollte ich einen Fehlerbericht ausfüllen?

Antwort

-1

Haben Sie einen inneren Join statt einen linken Join versucht? Die Abfrage, die Sie wahrscheinlich

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b 
       ON (a.something = b.something) 
WHERE b.type IN ('1', '2', '3') 

Sie brauchen könnten bekommen, dass durch die Funktion beitreten leftJoin ändern oder die Abfrage mit der Methode Create Erstellung Zoll Abfragen.

+0

Nun, ich alle A-Elemente abrufen möchten, sogar jene, die so eine innere keine B haben Join würde nicht helfen. Tatsächlich ist das aktuelle Verhalten das gleiche wie wenn ich einen inneren Join wegen der Where-Bedingung in der b.type-Spalte verwendet hätte. – Jay

-1

versuchen diese

SELECT a.id, 
     b.id 
FROM a 
     INNER JOIN b ON (a.something = b.something) and b.type IN ('1', '2', '3') 
Verwandte Themen