Doctrine2: l'héritage arbitraire de jointure et de table simple

Note: il s'agit d'une limitation ORM sur le projet de problème de tracker

je suis confronté à un problème de construire un DQL requête utilisant la syntaxe de jointure arbitraire introduite dans Doctrine 2.3 sur une classe entity qui est la racine d'une hiérarchie.

compte tenu de ces classes:

A - aucun héritage

B1 - abstrait, de la racine de la hiérarchie, colonne discriminante est nommé 'type'

j'ai configuré un constructeur de requêtes comme ceci:

$qb->select('a.id AS idA, b.id AS idB')
    ->from('EntityA', 'a')
    ->leftJoin('EntityB1', 'b', DoctrineORMQueryExprJoin::WITH, 'a.something=b.something');

et la Doctrine SQL génère quelque chose comme ceci:

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

le problème est que le où fait le gauche rejoindre inutile.

Est-il un moyen de forcer la condition sur la colonne discriminante pour être placé dans la jointure? À moins que ferait-il...

dois-je remplir un rapport de bogue?

10
demandé sur Ocramius 2012-12-13 16:58:58

3 réponses

ce bug est corrigé dans la Doctrine 2.4

https://github.com/doctrine/doctrine2/issues/2934

0
répondu Jay 2016-06-14 07:00:06

Avez-vous essayé une jointure interne au lieu d'une jointure gauche? La requête dont vous avez besoin pourrait probablement

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

Vous pouvez obtenir que la modification de la fonction leftJoin par join, ou la création de la requête avec la méthode createQuery pour les requêtes douanières.

-1
répondu josegil 2013-02-14 09:56:58

essayez ceci

SELECT a.id, 
       b.id 
FROM   a 
       INNER JOIN b ON ( a.something = b.something ) and b.type IN ( '1', '2', '3' ) 
-1
répondu Ayman Hussein 2013-09-25 08:32:55