Bonjour, Bonsoir, j'aurais besoin d'aide pour un problème d'utilisation de Doctrine.
Si je prends par exemple 3 tables :
1 case peut contenir plusieurs personnesCase 1-n _ 1-1 Personne 1-n _ n-1 Mission
1 personne ne peut être que sur une case
et une relation bi-directionnelle entre Personne et Mission avec plusieurs personnes concernées par une même mission et plusieurs missions pour une même personne.
Si je veux afficher pour une case donnée, toutes les personnes présentes et à côté de chaque personne les missions qui la concerne c'est facile je fais :
et j'obtiens quelque chose comme ça :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $q = Doctrine_Query::create() ->select('c.*, p.*, m.*') ->from('Case c') ->leftJoin('c.Personnes p') ->leftJoin('p.Missions m') ->where('c.id = 1'); $results = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
Et l'affichage se fait sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Case Personnes => array( 0 => Personne nom Missions => array( 0 => Mission nom objectif 1 => ... ) 1 => ... )
Mais si je veux afficher pour une case donnée, toutes les missions et à côté de chaque mission les personnes qui sont concernées par la mission je n'ai pas trouvé de moyen simple pour obtenir un tableau de résultat qui ressemblerait à ça :
- dois-je créer une relation directe entre Case et Mission avec une nouvelle table de relation, ce qui serait un peu redondant au niveau des données ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Case Missions => array( 0 => Mission nom objectif Personnes => array( 0 => Personne nom 1 => ... ) 1 => ... )
- dois-je faire une autre requête du genre
afin d'obtenir quelque comme ça :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $q = Doctrine_Query::create() ->select('c.*, p.*, m.*, pp.*') ->from('Case c') ->leftJoin('c.Personnes p') ->leftJoin('p.Missions m') ->leftJoin('m.Personnes pp') ->where('c.id = 1'); $results = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
et ensuite parcourir toutes les Missions pour créer moi-même Case["Missions"] dans le tableau de résultat ?
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 Case Personnes => array( 0 => Personne nom Missions => array( 0 => Mission nom objectif Personnes => array( 0 => Personne nom 1 => ... ) 1 => ... ) 1 => ... )
Est-ce que Doctrine est fait pour ça ?
En gros, quel est le moyen le plus simple ?![]()
Merci.
Partager