Faire un count des commentaires avec Doctrine

03 12 2016

Faire un count des commentaires avec Doctrine

Pour compter et afficher le nombre de commentaires postés sur son blog Symfony, il existe 2 solutions possibles:

  • faire un count dans un querybuilder sur l'entité Commentaires avec Doctrine
  • utiliser les relations et le filtre length de Twig

 

1ère méthode : Count avec querybuilder

Nous allons tout d'abord expliquer comment afficher le nombre de commentaires en utilisant un count dans une requête de querybuilder.

Nous allons utiliser cette méthode sur la page voir.html.twig (la page de l'article qui s'affiche après avoir cliqué sur le lien du titre) car nous récupérons le paramètre de l'article en nous rendant sur cette page, ce qui permettra de passer ce paramètre dans notre querybuilder.

Dans notre contrôleur voirAction(Article $article), on récupère donc l'entité Commentaire et on lui applique le querybuilder:

$commentaireNombre=$em->getRepository

("BlogBundle:Commentaires")

->commentaireByArticle($article);

On passe $commentaireNombre à la vue.

Et dans le repository de Commentaires, on créer le querybuilder :

    public function commentaireByArticle($article)
    {
        $qb = $this->createQueryBuilder('c')
                   ->select('COUNT(c)')
                   ->where('c.article= :article')
                   ->setParameter('article', $article);
        return $qb->getQuery()->getSingleScalarResult();        
    }

Ici, on eut utiliser la méthode getSingleScalarResult() au lieu d'un simple getResult() car on ne récupère qu'un résultat à la fois.

Puis dans le template voir.html.twig, on utilise la ligne suivante pour afficher "commentaire sans "s" quand il y en a qu'un seul et afficher "commentaires avec un "s" quand il y en a plusieurs:

{% if commentaireNombre ==1 %} {{ commentaireNombre }} commentaire {% elseif commentaireNombre > 1 %} {{ commentaireNombre }} commentaires{% endif%}

 

2ème méthode : les relations et le filtre length

Cette méthode est la plus simple

Pour afficher le nombre de commentaires dans les autres pages du blog, nous ne disposons pas du paramètre $article, c'est pourquoi nous allons utiliser les relations directement dans les templates avec un filtre twig.

Pour accéder aux commentaires nous pouvons simplement utiliser les relations car commentaires est un attribut de article.

Ainsi dans nos templates nous comptons le nombre de commentaires par article simplement en écrivant:

{{ article.commentaires | length }}

Ou length est le filtre Twig qui compte le nombre d'entrées.

Ainsi nous pouvons écrire dans les templates :

{% if article.commentaires|length ==1 %} {{ article.commentaires|length }} commentaire {% elseif article.commentaires|length > 1 %} {{ article.commentaires|length }} commentaires{% endif%}


 catégorie: Doctrine



Laisser un commentaire