Yii : afficher les requêtes SQL relatives aux ActiveRecord

Une des fonctionnalité les plus puissantes de Yii est très certainement la couche d’abstraction pour l’accès aux bases de données : CActiveRecord.

Ce qui rebute certains développeurs lorsqu’ils abordent ce type de classe, c’est de ne pas voir exactement la requête SQL produite par une appel à une méthode comme User::model()->findAll().

Les habitués de CakePHP connaissent la configuration Configure::write('debug', 2) qui permet d’avoir un affichage des requêtes et variables produites par le framework.

Et bien sachez que Yii sait faire la même chose. Et même en beaucoup mieux !

Dans le fichier de configuration protected/config/main.php de votre application, ajouter les lignes suivantes au niveau du tableau components>log>routes :

1
2
3
4
5
6
7
8
9
10
11
12
'components'=>array(
	'log'=>array(
		'class'=>'CLogRouter',
		'routes'=>array(
			array(
			     'class'=>'CWebLogRoute',
			     'levels'=>'trace, info',
 			    'categories'=>'system.db.*',
			)
		)
	)
),

Maintenant, chargez une page contenant un appel à la base de données par un ActiveRecord.

Et voila. La liste des requêtes apparaît à la fin de la page en clair :

blog-post-20090218

Et ça n’est pas tout. Vous pouvez également afficher tous les appels à Yii::trace() en ajustant la valeur de la propriété categories (system.* par exemple).

Toujours plus fort : pour les aficionados de Firebug, vous pouvez afficher ces informations directement dans la fenêtre de console du débogueur en ajoutant la propriété 'showInFireBug'=>true.

A vous les joies des traces, logs et autres joyeusetés !

  1. 09/03/2010 à 17:01 | #1

    J’utilise aussi l’extension YII debug toolbar (XWebDebugRouter) qui affiche ensuite un petit bouton dans le coin haut gauche, et qui devient une barre de menu quand on clique dessus.

    Pour le configurer: dans config/main.php:
    ‘components’=>array(
    ‘log’=>array(
    ‘class’=>’CLogRouter’,
    ‘routes’=>array(
    array(
    ‘class’=>’CFileLogRoute’,
    ‘levels’=>’error, warning, trace’,
    ),
    array( // configuration for the toolbar
    ‘class’=>’XWebDebugRouter’,
    ‘config’=>’alignLeft, opaque, runInDebug, fixedPos, collapsed, yamlStyle’,
    ‘levels’=>’error, warning, trace, profile, info’,
    ),
    ),
    ),

    Je garde cette extension sur mon site de test. Je commente et je décommente ces lignes en fonction des besoins ;-)

  2. 09/03/2010 à 18:55 | #2

    Effectivement, voila une extension bien pratique (qui n’existait pas à l’époque de la rédaction de cet article) qui permettra aux développeurs Symphony de n’être pas trop dépaysé en passant sur Yii :)
    On peut trouver l’extension à cette adresse, pour ceux qui seraient intéressés : http://www.yiiframework.com/extension/yiidebugtb/
    A l’attention de la communauté francophone des développeurs Yii Framework, rester connectez à Trinidev car, malgré le calme apparent sur le site, j’ai quelques tutoriaux dans les cartons pratiquement prêt à faire feu : un tuto sur l’utilisation des contrôles d’accès avec le système rbac et un autre qui traite des enregistrements des données relationnelles.
    A très bientôt donc, et n’hésitez pas à nous suggérer des sujets d’article pour cette rubrique Yii.

  1. 19/02/2009 à 19:27 | #1