2010-03-08 14 views
0

Nous utilisons symfony 1.0. Nous avons un module de travail avec des objets Propel. Les sql-querys sont visibles dans le symfony-debugbar sous le menu "DB".symfony - requête personnalisée propel log

Mon problème est que nous utilisons aussi sql-querys personnalisés via propel :: getRS ("select ...") Ces requêtes ne sont pas visibles dans la barre de débogage.

Est-ce que quelqu'un a une idée de comment faire cela?

Répondre

1

Méthode recommandée

L'enregistreur standard symfony serait la méthode recommandée:

à l'intérieur d'une action:

$this->logMessage('executed SQL: '.$sql); 

à l'intérieur du modèle (ou ailleurs):

sfContext::getInstance()->getLogger()->info('executed SQL: '.$sql); 

T Ces méthodes insèrent vos requêtes SQL dans l'onglet 'logs & msgs' de la barre d'outils de débogage dans la bonne position dans la chaîne d'exécution.

Cependant, si vous voulez juste voir les requêtes au haut de l'onglet «journaux & msgs de et ne pas besoin qu'ils soient stockés dans le journal permanent, vous pouvez utiliser $this->debugMessage($sql); à la place , ce qui signifie également que vous pouvez voir les requêtes ensemble et ne pas les rechercher dans la chaîne d'exécution du journal.

Une façon potentiellement préférable

Je soupçonne que vous voudrez peut-être ces requêtes SQL apparaissent sur l'onglet « DB » à la place. Ce ne sont pas directement pris en charge par symfony, mais vous pouvez 'hack' cette solution à la place:

à l'intérieur d'une action:

$this->logMessage(sprintf("{sfCreole} executeQuery(): [x.xx ms] %s", $sql)); 

à l'intérieur du modèle:

sfContext::getInstance()->getLogger()->info(sprintf("{sfCreole} executeQuery(): [x.xx ms] %s", $sql)); 

Cela imite la comportement de l'option de débogage dans symfony pour la consignation des requêtes SQL, et va donc pousser votre requête SQL personnalisée dans l'onglet 'DB' de la barre d'outils de débogage. Je laisse l'option de synchronisation [x.xx ms] à vous de mettre en œuvre si vous le souhaitez :)