Doctrine 2 : comment afficher la requête SQL ?

Débuguer la requête SQL générée par Doctrine 2 très facilement

08 avril 2014

Bien que très performant, Doctrine 2 peut parfois être compliqué à utiliser si on ne sait pas comment débuguer les appels qu'il génère.

Doctrine fournit par défaut l'interface Doctrine\DBAL\Logging\SQLLogger qui est implémentée par tous les loggers qui manipulent les requêtes SQL. Nativement cette interface est implémentée par Doctrine\DBAL\Logging\DebugStack et par la classe qui va nous intéresser le plus : Doctrine\DBAL\Logging\EchoSQLLogger. EchoSQLLogger, comme son nom l'indique, permet d'afficher sur la sortie standard toutes les requêtes que Doctrine va générer.

Le logger EchoSQLLogger

class EchoSQLLogger implements SQLLogger
{
    /**
     * Display a SQL statement.
     *
     * @param string $sql The SQL to be executed.
     * @param array $params The SQL parameters.
     * @param array $types The SQL parameter types.
     * @return void
     */
    public function startQuery($sql, array $params = null, array $types = null)
    {
    	echo $sql . PHP_EOL;

        if ($params) {
            var_dump($params);
    	}

        if ($types) {
            var_dump($types);
        }
    }

    /**
     * Mark the last started query as stopped. This can be used for timing of queries.
     *
     * @return void
     */

    public function stopQuery()
    {

    }
}
	

Rien de plus compliqué pour l'utiliser :

Utilisation du EchoSQLLogger

/* $doctrineEntityManager est une instance de Doctrine\ORM\EntityManager */

 $doctrineEntityManager->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
	

Rien ne vous empêche de créer votre propre SQL logger Doctrine qui écrira dans un fichier ou un syslog, enverra un mail etc...

A bientôt !

Par
Créateur et administrateur.

Dans la même catégorie

Formater un tableau pour CURLOPT_POSTFIELDS
Email avec pièce jointe en PHP
PHP : modifier les attributs privés d'un objet
Tester l'existence d'un fichier dans l'include path
Convertir récursivement un objet PHP en tableau
PHP : formater un tableau en CSV
Comment envoyer un mail en ligne de commande ?
RSYNC : Comment synchroniser des fichiers à travers une connexion ssh ?
Exécuter un code PHP en ligne de commande
Doctrine 2 : générer les classes PHP depuis la base de données
Comment catcher les erreurs en PHP ?
Comment construire une URL sans caractères spéciaux en PHP ?
Comment lister les fichiers PHP inclus sur ma page ?
Les fonctions anonymes récursives en PHP
Requête HTTP asynchrone en PHP
La résolution statique à la volée ou Late Static Bindings
Trouver les jours fériés français en PHP
Comment allumer son ordinateur à distance en PHP ?
Comment utiliser la balise meta viewport ?
Une version mobile de mon site avec le Zend Framework
Doctrine et le Zend Framework : Présentation, intégration et utilisation
Créer son flux RSS simplement avec Zend_Feed
Appliquer un layout sur un mail avec le Zend Framework
Comment lancer une requête multi-bases avec les fonctions MySQL ?
Implode / Explode : Du tableau à la chaine de caractères, de la chaine de caractères au tableau

Commentaire(s)