IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

hydratation collection et classe Proxies\__CG__ [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 116
    Par défaut hydratation collection et classe Proxies\__CG__
    Bonjour,

    J'ai une collection qui contient deux objets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    object(Doctrine\ORM\PersistentCollection)[1442]
      private 'snapshot' => 
        array (size=2)
          0 => 
            object(App\ProductBundle\Entity\AttributeGroup)[1427]
                ...
          1 => 
            object(Proxies\__CG__\App\ProductBundle\Entity\AttributeGroup)[1585]
    			...
    Je ne comprends pas pourquoi le deuxième objet est de type "Proxies".

    Quelqu'un pourrait m'expliquer le pourquoi et comment y remédier svp ? Merci.

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    Le mieux c'est de jeter un coup d'oeil sur les classes Proxy généré dans le cache de symfony (app/cache/doctrine/orm/proxy)

    Les classes Proxy héritent de tes classes entités, mais on accés à l'entity manager, ce qui leur permet de charger de façon transparente les données non récupérés dans la BDD.
    Elles permettent le lazy loading.


    Exemple de chargement complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $book = $em->createQuery("SELECT b,a FROM Book b JOIN b.author a")->getSingleResult();
    //requete SQL executé = SELECT a.*,b.* FROM book b JOIN author a ON b.author_id = a.id WHERE b.id=1
    //$book est une instance de Book
    
    $author = $book->getAuthor();
    //$author est une instance de Author
    $authorName=$author->getName();
    //les données de $author sont déjà hydraté, aucune requete SQL supplémentaire
    Exemple de chargement incomplet (lazy loading)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $book = $em->createQuery("SELECT b FROM Book b WHERE b.id=1")->getSingleResult();
    //ou bien 
    $em->getRepository('Book')->find(1);
    //requete SQL executé = SELECT b.* FROM book b WHERE b.id=1
    //$book est une instance de Book
    
    $author = $book->getAuthor();
    //$author est une instance de Proxy\Author
    $authorName=$author->getName();
    //lors de l'appel à la méthode getName, l'objet Proxy\Author provoque l'execution de la requete SQL SELECT * FROM author WHERE author_id = ?
    Il y a la même mécansme pour les Collections, on utilisera de façon transparente un objet ArrayCollection ou un objet PersistentCollection (ayant accés à l'entityManager)


    comment y remédier svp
    C'est un mécanisme interne à Doctrine, et pas un problème. (dans les deux cas ci dessus le code "$author instanceof Book" renvoit true)

    Néammoins s'il y a trop de requetes SQL dans le profiler, il faut songer à optimiser la récupération des tes entités par des jointures dans tes requetes.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 116
    Par défaut
    Merci pour cet éclaircissement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mise a jour de la classe proxy/stub en eclipse
    Par argv225 dans le forum Services Web
    Réponses: 2
    Dernier message: 11/07/2008, 12h15
  2. webservice,silverligth et classe proxy
    Par inno007 dans le forum Silverlight
    Réponses: 2
    Dernier message: 01/07/2008, 17h19
  3. générer la classe proxy en VB
    Par le lynx dans le forum Services Web
    Réponses: 1
    Dernier message: 21/04/2007, 11h02
  4. [VBA] Collection et Classes
    Par funkadelic dans le forum Général VBA
    Réponses: 2
    Dernier message: 02/02/2007, 13h10
  5. Utilisation de Classe Proxy
    Par BigNic dans le forum C++
    Réponses: 3
    Dernier message: 03/01/2006, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo