2015-04-18 1 views
1

Avec mon application symfony2/doctrine2, il y a des cas où j'ai du mal à comprendre où je n'ai pas ajouté les bonnes entités dans mes requêtes, ce qui résulte en nombre anormal de requêtes.symfony2 doctrine2: créer un événement qui écoute les requêtes sélectionnées et renvoie la trace

Je suis impatient de construire une classe qui retournerait la trace pour chaque requête que j'ai lancé, donc je peux comprendre où je dois ajouter quoi.

Questions:

  1. est l'événement postLoad de doctrien la bonne pour le faire? J'ai fait pas trouvé un événement select
  2. une fois que je suis dans mon eventListener, comment puis-je obtenir la trace de quelque chose même sans qu'une exception soit levée?

EDIT:

j'ai réussi à modifier le profileur. Voyez comment cela est fait ici:

Symfony2/Doctrine2 : How to override DebugStack class used in doctrine DataCollector?

+0

La barre d'outils de débogage ne fournit-elle pas suffisamment d'informations à utiliser? Je sais que cela ne montre pas d'où exactement les requêtes sont en cours d'exécution, mais en regardant le code SQL généré, vous devriez pouvoir facilement tout suivre. On m'a demandé d'optimiser les projets avec des requêtes bizarres, et la barre de débogage fait vraiment l'affaire. – Artamiel

+0

Eh bien, je pense que ce n'est pas optimal. Il serait si facile de l'optimiser avec la trace pour chaque requête! –

+0

Eh bien, à tout le moins, je peux vous suggérer de jeter un oeil à la façon dont ils ont créé le profileur sql. Je suis sûr que vous pouvez avoir une idée à partir de là comme point de départ. L'espace de noms de classe complète est: ** Symfony \ Bridge \ Doctrine \ DataCollector \ DoctrineDataCollector ** et son sous vendeur ** symfony/symfony ** – Artamiel

Répondre

0

Si vous parlez de SELECT requêtes que probablement l'événement postLoad suffit.

Vous pouvez toujours utiliser debug_backtrace pour générer la trace sans aucune exception. http://php.net/manual/en/function.debug-backtrace.php

Ensuite, vous pouvez l'enregistrer pour un traitement ultérieur.

+0

sympa, c'est ce que j'ai fait ici https://stackoverflow.com/questions/29855412/ symfony2-doctrine2-comment-override-debugstack-class-utilisé-dans-doctrine-datacol –