2012-12-13 10 views
10

Nota: Questa è una limitazione ORM reported on the project's issue trackerDoctrine2: Arbitrary aderire e singola ereditarietà delle tabelle

Sto affrontando un problema la costruzione di un DQL query utilizzando la sintassi join arbitraria introdotto nel Dottrina 2.3 su una classe di entità che è la radice di una gerarchia.

Attribuite queste classi:

A - nessuna eredità

B1 - astratti, radice di una gerarchia, colonna discriminatore si chiama 'tipo'

installo un generatore di query come this:

$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'); 

E la Doctrine SQL genera è qualcosa di simile:

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

I problemi è che la dove fa la LEFT JOIN inutile.

C'è un modo per forzare la condizione sulla colonna discriminatore da inserire nel join? Almeno questo lo renderebbe ...

Devo riempire un bug report?

risposta

-1

Hai provato un join interno invece un join sinistro? La query che è necessario probabilmente potrebbe

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

È possibile ottenere che la modifica della funzione leftJoin da unire, o la creazione di query con il metodo createQuery per le query doganali.

+0

Beh, io voglio per recuperare tutti gli elementi A, anche quelle che non hanno alcun B così un interno unirsi non aiuterebbe. In realtà, il comportamento corrente è lo stesso di quando ho usato un inner join a causa della condizione where sulla colonna b.type. – Jay

-1

provare questo

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