Blog d'un passionné du web (Symfony2, HTML5, Sass, Gulp…)

Mon site freelance
Mon Facebook - Mon Twitter

Entité Doctrine par référence – Astuce Symfony

Voici une fonction assez peu utilisée sur les projets Symfony et qui permet de supprimer des requêtes inutiles auprès de la base de données. Simplement en faisant référence à votre entité. Depuis un controller :

$em = $this->getDoctrine()->getManager(); 
$em->getReference('AppBundle:Article', $articleId)

Pour comprendre rien de tel qu’un petit exemple : un article sur lequel les utilisateurs peuvent poster des commentaires. Lors de l’envoi du formulaire contenant le commentaire vous allez récupérer l’identifiant de l’article à rattacher. La première façon qui est la plus commune est de récupérer l’article :

$article = $em->findOnById($articleId);
$comment->setArticle($article);

Dans cet exemple vous allez donc faire une requête en base de donné uniquement pour pouvoir faire référence à l’objet lors de la création du commentaire. Heureusement Doctrine pense à tout et laisse la possibilité de faire référence à votre entité :

$article = $em->getReference('AppBundle:Article', $articleId);
$comment->setArticle($article);

De cette façon vous supprimez la requête en base de données.
Attention tout de même à quelques points :

  • il n’y a pas de contrôle sur l’existence de l’article, on ne doit donc utiliser cette astuce que si il n’y pas de risque de suppression de l’objet entre temps
  • attention à l’information enityId que vous récupérez -> il ne doit pas s’agir d’une information saisie en front par un utilisateur …

Si vous avez des remarques, n’hésitez pas à m’en faire part.

31 août 2016


Previous Post

Next Post