Doctrine PDO Query in Symfony 1.4 Toolbar

28 mars 2012 par: Benoit Bonneville

Comment stoquer les requettes SQL PDO dans la toolbar de Symfony 1.4 pour debuger. Comme vous ne passez pas par Doctrine il va falloir ruser pour les intégrer à la sfWebDebug toolbar.

Exemple de requette PDO:

Ce code execute une simple requette SQL en utilisant la connection PDO, obtenue à partir de Doctrine.

Nous utiliserons ici la connection du nom de « doctrine », car c’est la plus fréquement utilisée dans les projets symfony.

$databaseManager = sfContext::getInstance()->getDatabaseManager(); 

// "doctrine" is the most common name used, maybe yours can differ 
$database = $databaseManager->getDatabase("doctrine"); 
$dbh = $database->getConnection(); 

$query = "SELECT * FROM Users WHERE id = :id"; 
$params = array(':id' => 1); 

$statement= $dbh->prepare($query); 
$statement->execute($params); 

// fetch the data ...

 

Loguer la requette PDO

Nous reprennons l’exemple précédent en rajoutant les éléments de profiling et de debug Symfony.

$databaseManager = sfContext::getInstance()->getDatabaseManager();

// "doctrine" is the most common name used, maybe yours can differ 
$database = $databaseManager->getDatabase("doctrine"); 
$dbh = $database->getConnection(); 

$doctrineConnection = $database->getDoctrineConnection(); 
$profiler = $database->getProfiler();
 
$query = "SELECT * FROM Users WHERE id = :id"; 
$params = array(':id' => 1); 

$statement= $dbh->prepare($query); 

// Event Before Execute 
if($profiler) { // $profiler is available only in "dev" mod
    $event = new Doctrine_Event( 
        $doctrineConnection, 
        Doctrine_Event::STMT_EXECUTE, 
        $query, 
        $params); 
    $profiler->pre($event);
}
 
$statement->execute($params); 

// Event After Execute 
if($profiler) {
    $profiler->end($event); 
}
 
// fetch the data ...

Dès à présent, vous retrouverez vos requette SQL PDO avec leur temps d’exécution dans votre toolbar.

Vous noterez ici que les fonctions appelées « pre » et « end » ont été choisie arbitrairement.
Le profiler symfony impose simplement que la fonction ouvrante commence par « pre » et que la fonction fermante ne doit pas commencer par « pre ».

A vous de jouer avec PDO

A vous de réaliser votre classe de gestions de requette PDO, qui log automatiquement vos requêtes.
Mais évitez d’en abuser. PDO doit se limiter à des cas d’optimisation de performance extrême ou de requêtes trop complexe, ce qui risque de vous rendre dépendant de votre SGBD.

Mais n’oubliez pas, Doctrine sait déjà gérer de simple COUNT/SUM/AVG.

Répondre