Les différents moyens d’exécution d’une requête Doctrine2

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();

Une réflexion au sujet de « Les différents moyens d’exécution d’une requête Doctrine2 »

  1. Ping : Utiliser Doctrine avec Zend Framework 2.0 | Netsyos

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>