Pour exécuter une requête Doctrine, il y’a plusieurs façons de faire à partir du Query Builder Doctrine2.
Doctrine2: Récupérer une collection de résultats
Exemple de requête à exécuter:
$q = $this->createQueryBuilder('p')
->where('p.state = :state')
->setParameter('state', $state);
Récupérer tous les posts valides.
$q->getQuery()->execute();
Va permettre de retourner une collection d’objets (\Doctrine\Common\Collections\ArrayCollection()) de notre entité Post.
execute() a un équivalent:
$q->getQuery()->getResult()
Doctrine2: Récupérer un seul résultat
Si nous souhaitons récupérer une seule entrée avec Doctrine dans Symfony2:
$q = $this->createQueryBuilder('p')
->where('p.id = :post')
->setParameter('post', $idPost);
Il suffit d’utiliser getSingleResult() ou getOneOrNullResult().
$q->getQuery()->getOneOrNullResult()
L’avantage de getOneOrNullResult() et qu’il retournera null si aucune donnée n’est trouvée, contrairement à getSingleResult() qui déclenchera une erreur.
Doctrine2: Récupérer uniquement une valeur
Dans le cas d’un count() par exemple, nous ne souhaitons récupérer qu’une seule valeur avec notre requête:
$q = $this->createQueryBuilder('p')
->select('COUNT(p)');
On exécute la requête du Query Builder avec getSingleScalarResult()
$q->getQuery()->getSingleScalarResult();
Doctrine2: Récupérer les données en tableau
Et si vous ne souhaitez pas récupérer vos données sous forme d’objet, vous pouvez les récupérer formatées en tableau:
$q = $this->createQueryBuilder('p')
->where('p.state = :state')
->setParameter('state', $state);
Récupérer tous les posts valides.
$q->getQuery()->getScalarResult();
OU
$q->getQuery()->getArrayResult();