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.