Bonjour à tous,

Voici mon query builder

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$qb->select(array('o1', 'o2', 'a', 'af', 'p'))
->from('MonBundle:Organisation', 'o1')
->join('o1.orgafils', 'o2')
->join('o2.agents', 'a')
->join('a.affaires', 'af')
->join('af.planification', 'p')
->where('af.etat <> \'Archivée\'')
->andwhere('af.segment is not null')
->andwhere('af.retard = 1')
->orderBy('o1.nom');
 
if($niveau) {
   switch($niveau) {
      case 'agence' :
         $qb->andwhere('o1.nom = :param');
         break;
      case 'secteur' :
         $qb->andwhere('o2.nom = :param');
         break;
      case 'agent' :
         $qb->andwhere('a.nomPrenom = :param');
         break;
   }
 
   $qb->setParameter('param', $nom);
}
 
if ($l->getType() == 'secteur') {
   $qb->andwhere('af.organisation in (:o)');
   $qb->setParameter('o', $od->getFilsIdList( $od->getId($l->getData())) );
}
 
$query = $qb->getQuery();
Comme vous le voyez, il y a une contrainte supplémentaire sous certaines conditions.

Quand je n'ai pas de contrainte supplémentaire, OK
Quand j'ai la contrainte 'agence', OK
Quand j'ai la contrainte 'secteur' ou 'agent', c'est le bazar.

Je m'explique :

Quand c'est OK, je retrouve bien les éléments attendus soumis aux différents conditions.
Quand c'est le bazar, c'est comme si Doctrine (son cache ?) avait oublié une partie du résultat (même si le SQL est bon) donc il interroge plusieurs fois la base (sans les conditions) lorsque je parcours mes objets.

Avez vous une idée ?

Merci d'avance