Forcer automatiquement une jointure avec Doctrine

Forcer automatiquement une jointure avec Doctrine
par Rémi Leclerc, le 12/04/2015

Pour forcer automatiquement une jointure avec Doctrine, il suffit de spécifier l'option fetch="EAGER".

Par exemple :

class Objet
{
    //...
 
    /**
     * @ORM\ManyToOne(targetEntity="ObjetStatut", inversedBy="objets", fetch="EAGER")
     * @ORM\JoinColumn(nullable=false)
     */
    private $statut;
 
    //...
}

Cette option permet d'éviter un trop grand nombre de requêtes si la cible de la jointure est souvent récupérée.

Avec le code ci-dessous, aucune requête ne sera exécutée avec l'option fetch="EAGER" mais sans, une requête sera lancée à chaque passage dans la boucle.

$objets = [
    $objetManager->findOneById(1),
    $objetManager->findOneById(2)
];

foreach ($objets as $objet) {
    echo $objet->getStatut()->getId();
}

Mais attention à ne pas utiliser trop fréquemment cette option si cela est inutile car cela alourdirait inutilement chaque requête.