Bonjour à tous,
J'ai une entité Contact ManyToOne Personne et une entité Compte ManyToOne Société.
J'aimerai afficher sur la gauche de mon écran, une liste des derniers éléments consultés (grâce à une date de consultation que j'ai en attribut), qui sont les contacts et les comptes.
J'effectue donc cette requête dans mon PersonneRepository :
Et mon action pour afficher ces éléments récents :
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
34
35
36
37
38
39
40
41
42
43
44
45
46 /** * * @return array : 10 derniers éléments consultés dans un tableau */ public function getElementsRecents() { $em = $this->getEntityManager(); $rsm = new ResultSetMappingBuilder($em); $rsm->addRootEntityFromClassMetadata('IcmeMainBundle:Personne', 'p'); $rsm->addRootEntityFromClassMetadata('IcmeMainBundle:Societe', 's', array( 'id' => 'idSociete', 'nom' => 'nomSociete', 'idAdresse' => 'idAdresseSociete', 'siteWeb' => 'siteWebSociete', 'dateCreation'=> 'dateCreationSociete')); $rsm->addJoinedEntityFromClassMetadata('IcmeGrcBundle:Contact', 'c', 'p', 'contact', array( 'id' => 'idPersonneContact', 'actif' => 'actifContact', 'dateCreation'=> 'dateCreationContact')); $rsm->addJoinedEntityFromClassMetadata('IcmeGrcBundle:Compte', 'cpte', 's', 'compte', array( 'id' => 'idSocieteCompte', 'dateCreation'=> 'dateCreationCompte', 'description' => 'descriptionCompte', 'dateConsultation' => 'dateConsultationCompte', 'actif' => 'actifCompte', 'siteWeb' => 'siteWebCompte', 'idProfil' => 'idProfilCompte')); $sql = "SELECT contact.dateConsultation AS dateObjet, personne.id, personne.nom FROM personne, contact WHERE personne.id = contact.idPersonne UNION SELECT compte.dateConsultation AS dateObjet, societe.id, societe.nom FROM societe, compte WHERE compte.idSociete = societe.id ORDER BY dateObjet DESC LIMIT 10 "; $query = $em->createNativeQuery($sql, $rsm); return $query->getResult(); }
Mon souci est que, lorsque je me situe sur la page d'affichage de tous mes contacts, j'ai mes deux requêtes qui entrent en "conflit". Ici étant donné que je n'affiche que le nom pour les éléments récents, j'ai uniquement le nom de mes contacts qui apparait dans ma page d'affichage des contacts.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public function afficherAction () { $em = $this->getDoctrine()->getEntityManager(); $elementsRecents = $em->getRepository('IcmeMainBundle:Personne')->getElementsRecents(); return $this->render('IcmeMainBundle:ElementsRecents:afficher.html.twig', array('elementsRecents' => $elementsRecents)); }
En effet, la requête est basée sur mon entité Personne, et je pense que le souci vient de là, mais je ne vois pas comment effectuer deux requêtes séparées.
Autre question, je ne sais pas où placer ma requête pour les éléments récents, car le PersonneRepository n'est pas vraiment fait pour cette requête puisque je sélectionne les comptes également et par la suite d'autres objets.
Voici ma requête SQL pour sélectionner tous ces objets :
Ma question est : Comment puis-je fais un OrderBy sur l'ensemble de mes dateConsultation. Il me semble qu'avec Doctrine 2 c'est impossible, si je ne me trompe pas, puisqu'il faut utiliser un UNION...
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 SELECT compte.dateConsultation AS dateObjet, societe.nom FROM compte, societe WHERE compte.idSociete = societe.id * UNION * SELECT opportunite.dateConsultation as dateObjet, opportunite.nom FROM opportunite * UNION * SELECT contact.dateConsultation as dateObjet, CONCAT(CONCAT(personne.nom, " "),personne.prenom) FROM contact, personne WHERE contact.idPersonne = personne.id * UNION * SELECT piste.dateConsultation as dateObjet, CONCAT(CONCAT(personne.nom, " "),personne.prenom) FROM piste, personne WHERE piste.idPersonne = personne.id * UNION * SELECT tache.dateConsultation as dateObjet, tache.objet FROM tache * UNION * SELECT evenement.dateConsultation as dateObjet, evenement.objet FROM evenement * ORDER BY dateObjet DESC
Si quelqu'un pouvait m'éclairer...
Merci d'avance,
Cordialement.
Partager