Les procurations
Une Doctrine proxy est juste un wrapper qui étend une classe d'entité pour fournir le Chargement Paresseux pour cela.
Par défaut, lorsque vous demandez le Gestionnaire d'Entité dans une entité associée à une autre entité, l'entité associée ne sera pas chargé à partir de la base de données, mais enveloppé dans un objet proxy. Lorsque votre application demande une propriété ou appelle une méthode de ce proxy entité, Doctrine charge de l'entité de la base de données (sauf quand il vous demande le code, qui est toujours connu pour le proxy).
Ce qui se passe entièrement transparente à votre demande en raison du fait que le mandataire s'étend de votre classe d'entité.
La Doctrine, par défaut, l'hydrate d'associations de lazy load procurations si vous n'avez pas JOIN
dans votre requête ou de définir le mode de lecture à l' EAGER
.
Maintenant, je dois ajouter que cette car je n'ai pas assez de réputation pour commenter partout:
Malheureusement, Crozin la réponse contient la désinformation.
Si vous exécutez une requête DQL
SELECT u.id, u.username FROM Entity\User u WHERE u.id = :id
vous n'obtiendrez pas un (proxy) de l'entité objet, mais un tableau associatif. Il n'est donc pas possible de lazy load toutes les propriétés supplémentaires.
Avec cela à l'esprit, on en vient à la conclusion que le cas d'utilisation exemple ne fonctionne pas, soit.
Le DQL devrait être modifié de quelque chose comme cela dans le but d'accéder $article
comme objet:
SELECT a FROM Entity\Article a ORDER BY a.createdAt DESC LIMIT 25
Et la restitution des biens en getContent()
devrait être une association afin de ne pas charger les propriétés du contenu de tous les 25 entités.
Partielle Des Objets
Si vous voulez charger partiellement propriétés d'entité qui ne sont pas des associations, vous avez à dire à cette Doctrine explicitement:
SELECT partial u.{id, username} FROM Entity\User u WHERE u.id = :id
Cela vous donne un partiellement chargé de l'entité de l'objet.
Mais méfiez-vous que la partielle des objets ne sont pas des procurations! Chargement différé ne s'applique pas à eux. Par conséquent, l'utilisation partielle des objets est généralement dangereux et doivent être évités. Lire la suite: Partielle des Objets - ORM Doctrine 2 2 documentation