Quelle est la différence entre fetch=“IMPATIENT” et fetch=“PARESSEUX” dans la doctrine
Quelle est la différence entre fetch="EAGER"
et fetch="LAZY"
dans l'annotation @ManyToOne
dans la Doctrine ?
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER")
*/
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY")
*/
Vous devez vous connecter pour publier un commentaire.
Pour l'expliquer simplement, lorsque vous chargez une entité et si il y a une association avec une ou plusieurs entités, ce qui devrait doctrine faire?
Si l'association est marqué comme DÉSIREUX, il va aller le chercher et à charge de l'entité associée ainsi.
Si l'association est marqué comme PARESSEUX, doctrine créer des objets proxy (dummy objets) en lieu et place de l'entité réelle. Seulement lors du premier appel à cette entité associée (comme
$cart->getItems()
), doctrine d'extraction et de chargement de l'objet(s) à partir de la base de données.Consulter: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/advanced-configuration.html#association-proxies
LAZY
?Plus d'informations sur la différence entre eux:
(fetch = "EAGER")
les entités associées seront récupérés dès que la requête d'origine entité qui est chargée de la doctrine. Cela signifie que il n'y a aucune requête SQL sur DB.
(fetch = "LAZY")
les entités associées seront récupérés UNIQUEMENT SI l'original de la requête cible entité appelle la méthode de référence, tels que
$cart->getItems()
. Cela signifie que, il estadditional
requête SQL sur DB.