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?
3 réponses
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.
essayez ceci
SELECT a.id,
b.id
FROM a
INNER JOIN b ON ( a.something = b.something ) and b.type IN ( '1', '2', '3' )