Gibt es eine Möglichkeit, CakePHP dazu zu bringen, sein SQL-Protokoll bei Bedarf zu sichern? Ich möchte Code bis zu einem bestimmten Punkt in meinem Controller ausführen und sehen, welche SQL ausgeführt wurde.
75
Versuche dies:
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
Sie müssen dies für jede Datenquelle tun, wenn Sie jedoch mehr als eine haben.
$log = $this->Model->getDataSource()->showLog( false ); debug( $log )
. Nur für den Fall, dass jemand anderes diese Antwort über eine Suche findet.Configure::write('debug', 2);
, dass die MySQL-Protokollierung aktiviert wird.Es gibt vier Möglichkeiten, Abfragen anzuzeigen:
Dies zeigt die letzte vom Benutzermodell ausgeführte Abfrage:
Dies zeigt alle ausgeführten Abfragen des Benutzermodells:
Dies zeigt ein Protokoll aller Abfragen:
Wenn Sie alle Abfrageprotokolle in der gesamten Anwendung anzeigen möchten, können Sie sie in view / element / filename.ctp verwenden.
quelle
Wenn Sie CakePHP 1.3 verwenden, können Sie dies in Ihre Ansichten einfügen, um SQL auszugeben:
Sie können also eine Ansicht mit dem Namen "sql" erstellen, die nur die obige Zeile enthält, und diese dann in Ihrem Controller aufrufen, wann immer Sie sie sehen möchten:
(Denken Sie auch daran, Ihre Debug-Stufe auf mindestens 2 Zoll einzustellen.
app/config/core.php
)Quelle
quelle
für cakephp 2.0 Schreiben Sie diese Funktion in AppModel.php
function getLastQuery() { $dbo = $this->getDatasource(); $logs = $dbo->getLog(); $lastLog = end($logs['log']); return $lastLog['query']; }
So verwenden Sie dies in Controller Write: echo $ this-> YourModelName-> getLastQuery ();
quelle
Es ist sehr frustrierend, dass CakePHP kein $ this-> Model-> lastQuery (); hat. Hier sind zwei Lösungen, einschließlich einer modifizierten Version von Handsofaten:
1. Erstellen Sie eine letzte Abfragefunktion
Um den letzten Abfragelauf zu drucken, fügen Sie in Ihrer Datei /app_model.php Folgendes hinzu:
function lastQuery(){ $dbo = $this->getDatasource(); $logs = $dbo->_queriesLog; // return the first element of the last array (i.e. the last query) return current(end($logs)); }
Um die Ausgabe zu drucken, können Sie Folgendes ausführen:
ODER
2. Rendern Sie die SQL-Ansicht (im Modell nicht verfügbar).
So drucken Sie alle Abfragen aus, die in einer bestimmten Seitenanforderung in Ihrem Controller (oder Ihrer Komponente usw.) ausgeführt werden:
Es wird wahrscheinlich einen fehlenden Ansichtsfehler auslösen, aber dies ist besser als kein Zugriff auf aktuelle Abfragen!
(Wie Handsofaten sagte, gibt es die Datei /elements/sql_dump.ctp in cake / libs / view / elements /, aber ich konnte das oben genannte tun, ohne die Ansicht sql.ctp zu erstellen. Kann das jemand erklären?)
quelle
In CakePHP 1.2 ..
quelle
Was schließlich für mich funktioniert hat und auch mit 2.0 kompatibel ist, ist das Hinzufügen in meinem Layout (oder im Modell)
Dies hängt auch von der Debug-Variablen ab, die in Config / core.php festgelegt ist
quelle
Das Plugin DebugKit für Kuchen erledigt ebenfalls die Aufgabe. https://github.com/cakephp/debug_kit
quelle