CakePHP : récupérer les requêtes SQL exécutées lors du traitement d’une action

24 Mai 2011 4

CakePHP stocke toutes les requêtes SQL exécutées lors de l’appel d’une action dans un tableau qui se nomme « _queriesLog ». Ce tableau est disponible sur n’importe quel modèle. Il est possible de renvoyer l’ensemble des requêtes SQL comme ceci :

Fichier app/app_model.php
[php] public function geQueries ()
{
$dbo = $this->getDatasource();
return $dbo -> _queriesLog;
}
[/php]

La fonction getQueries() peut alors être appelée sur un modèle.
[php] debug($this -> Model -> getQueries());
[/php]

Par extension, vous pouvez seulement renvoyer la dernière requête SQL exécutée :
[php] public function getQueries ()
{
$dbo = $this->getDatasource();
$logs = $dbo -> _queriesLog;

return end($logs);
}
[/php]

4 Comments
  • kenza
    juillet 18, 2014

    je cherche a afficher sql query qui s’execute lors d’un ajout d’un utilisateur ??

  • Benjamin
    septembre 11, 2019

    Sinon il existe l’élément sql_dump sous cake 1.3 (echo $this->element(‘sql_dump’) dans son layout) qui sert à afficher le sql log de la page courante ou encore l’excellent debug kit qui intègre également cette fonctionnalité.

  • Benjamin
    juin 8, 2011

    Sinon il existe l’élément sql_dump sous cake 1.3 (echo $this->element(‘sql_dump’) dans son layout) qui sert à afficher le sql log de la page courante ou encore l’excellent debug kit qui intègre également cette fonctionnalité.

    • Nicolas Hachet
      juin 9, 2011

      Tout à fait, cependant sql_dump est un élément donc utilisé coté vue.
      Si on souhaite manipuler les logs coté contrôleur, c’est une solution possible.

      En Cake 1.3, il y a également la fonction getLog :
      [php]$log = $this->Model->getDataSource()->getLog(false, false);[/php]

      Voir la doc ici : Documentation Cake getLog()

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *