Sommaire

Le Lazy LoadingLazy Loading

Il est très important d’avoir présent à l’esprit cette notion quand on développe avec les jointures.

Symfony utilise un procédé qui s’appelle le Lazy Loading pour réaliser ses jointures. Il essaie d’optimiser les requêtes. En synthèse, il ne charge que ce dont il a besoin, au moment où il en a besoin.

Ainsi, lorsqu’il exécute la commande :

$listeProduits=$produitsRepository->findAll();

la requête générée ne fait pas une réelle jointure. Elle utilise un objet Proxy pour simuler la jointure. Tant que des informations de la table inverse ne sont pas demandées, la requête ne fait pas de jointure.

Pour plus de précisions sur les objets Proxy, consultez le lien https://fr.wikipedia.org/wiki/Proxy_(patron_de_conception)

Voyons un exemple.

Créons une action eager() qui va appeler une vue pour afficher les noms des produits :

/** 
     * @Route("/eager", name="eager") 
     */ 
    public function eager() 
    { 
 
        $em=$this->getDoctrine()->getManager(); 
        $produitsRepository=$em->getRepository(Produit::class); 
 
        $listeProduits=$produitsRepository->findAll(); 
 
        return ...