Bonjour,

Je cherche à mettre des conditions sur des jointures avec doctrine, mais pour l'instant je ne trouve pas comment procéder.
En SQL je procede de la sorte :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT DISTINCT p.nom FROM personnes p
INNER JOIN groupes g
INNER JOIN formations f
INNER JOIN evenement e
ON ( p.id = g.id_personne AND g.id IN (1,2,3) )
OR ( p.id = f.id_personne AND f.id IN (1,2,3) )
OR ( p.id = e.id_personne AND e.id IN (1,2,3) )

Le but avec un OR et de filtrer les personnes ayant participé à une formation ou appartenant à tel groupe ou encore ayant participé à un événement.
Avec un AND la requête filtrerais les personnes ayant participé à un évenement et appartenant à une formation et ayant participé à un évènement, donc plus restrictif.

Avec Doctrine lorsque je fais ce genre de requete :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT DISTINCT ent FROM Admin\Entity\PrivateDetails ent  
JOIN ent.events evs  
JOIN ent.groups grp  
JOIN ent.formations for  
WITH ( evs IN (?1) OR grp IN (?2) OR for IN (?3) )

J'utilise la clause WITH pour avoir le ON à la fin de la requête. Mais lorsque doctrine me génère la requête finale je n'ai pas une clause ON unique à la fin comme je le souhaiterais pour que ma requête donne le résultat voulu.

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT DISTINCT * FROM private_details p0_ INNER JOIN private_details_event p2_ ON p0_.id = p2_.private_details_id 
INNER JOIN event e1_ ON e1_.id = p2_.event_id AND (e1_.del = 0) 
INNER JOIN private_details_group p4_ ON p0_.id = p4_.private_details_id 
INNER JOIN groupes g3_ ON g3_.id = p4_.group_id AND (g3_.del = 0) 
INNER JOIN private_details_formation p6_ ON p0_.id = p6_.private_details_id 
INNER JOIN formation f5_ ON f5_.id = p6_.formation_id 
AND (f5_.del = 0) AND ((e1_.id IN (?) OR g3_.id IN (?) OR f5_.id IN (?)))

Existe il une solution pour obtenir une condition uniquement à la fin de la requête comme dans le premier exemple ?