Bonjour a tous,
J'ai un soucis sur Symfony2, plus précisément sur une requête a réaliser et je souhaiterai le faire avec le QueryBuilder. Pour faire simple j'ai une relation ManyToMany entre un Objet "Article" et un autre "Tag". Cette relation est déclarée dans "Article".
Ce que je souhaite:
Je veux faire une requête qui me donnera en retour un tableau ou un objet ou chaque ligne contient l'id et le titre du tag ainsi que le nombres d'articles dans lequel ce tag est utilisé, ceci pour chaque tag. En SQL ca donnerai exactement ceci: (en considérant la table article pour l'objet article / la table tag pour l'objet tag et la table article_tag qui établit la relation au niveau SQL.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT t.id, t.titre, COUNT(t.id) AS nbTags FROM tag AS t, article_tag AS r WHERE t.id = r.tag_id GROUP BY t.id ORDER BY nbTags DESC
Je ne suis vraiment pas à l'aise avec le QueryBuilder et n'arrive pas du tout a effectuer la requête, j'ai vaguement tenté (depuis le repository de mon objet Tag comme suit (mais c'est vraiment perdu la -_-) et même en cherchant sur le web je n'arrive pas a comprendre comment adapter les solutions fournies a certains problème vers le mien.
Merci d'avance de me montrer comment on fait pour retourner un tableau avec l'id et le titre de chaque tag ainsi que le nombres d'articles dans lequel il est utilisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class TagRepository extends EntityRepository { public function getTagsByPriority(){ $req = $this->getEntityManager()->createQueryBuilder('t') ->join('CodeyourwebArticleBundle:Article','a') ->addSelect('COUNT(t) AS nbTags') ->groupBy('t.id') ->orderBy('nbTags', 'DESC'); return $req->getQuery()->getResult(); } }
Partager