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

3 No tags Permalink

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

public function geQueries ()
    {
        $dbo = $this->getDatasource();
        return $dbo -> _queriesLog;
    }

La fonction getQueries() peut alors être appelée sur un modèle.

debug($this -> Model -> getQueries());

Par extension, vous pouvez seulement renvoyer la dernière requête SQL exécutée :

public function getQueries ()
    {
        $dbo = $this->getDatasource();
        $logs = $dbo -> _queriesLog;
        
        return end($logs);
    }
  • kenza

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

  • 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

      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 :

      $log = $this->Model->getDataSource()->getLog(false, false);

      Voir la doc ici : Documentation Cake getLog()