Wie kann ich die roh ausgeführte SQL-Abfrage in Laravel 3/4 mit Laravel Query Builder oder Eloquent ORM abrufen?
Zum Beispiel so etwas:
DB::table('users')->where_status(1)->get();
Oder:
(posts (id, user_id, ...))
User::find(1)->posts->get();
Wie kann ich sonst zumindest alle in laravel.log ausgeführten Abfragen speichern?
Antworten:
Laravel 4+
In Laravel 4 und höher müssen Sie anrufen
DB::getQueryLog()
, um alle ausgeführten Abfragen zu erhalten.Oder Sie können ein Profiler-Paket herunterladen. Ich würde barryvdh / laravel-debugbar empfehlen , was ziemlich ordentlich ist. Anweisungen zur Installation in ihrem Repository finden Sie hier .
Hinweis für Laravel 5-Benutzer: Sie müssen anrufen,
DB::enableQueryLog()
bevor Sie die Abfrage ausführen. Entweder direkt über der Zeile, in der die Abfrage ausgeführt wird, oder in einer Middleware.Laravel 3
In Laravel 3 können Sie die zuletzt ausgeführte Abfrage von einem
Eloquent
Modell abrufen, das die statische Methodelast_query
für dieDB
Klasse aufruft .Dies setzt jedoch voraus, dass Sie die
profiler
Option in aktivierenapplication/config/database.php
. Alternativ können Sie, wie @dualed erwähnt, dieprofiler
Option in aktivierenapplication/config/application.php
oder aufrufenDB::profile()
, um alle Abfragen in der aktuellen Anforderung und deren Ausführungszeit auszuführen .quelle
ErrorException
: Warnung:call_user_func_array()
erwartet, dass Parameter 1 ein gültiger Rückruf ist, KlasseIlluminate\Database\MySqlConnection
hat keine MethodegetQueryList
.getQueryLog
. Es wurde jetzt behoben. Vielen Dank!Sie können den " Profiler " in Laravel 3 durch Einstellen aktivieren
In deinem
application/config/application.php
undapplication/config/database.php
Dies aktiviert eine Leiste am unteren Rand jeder Seite. Eine seiner Funktionen ist das Auflisten der ausgeführten Abfragen und wie lange sie jeweils gedauert haben.
quelle
Für Eloquent können Sie einfach Folgendes tun:
Sie müssen jedoch den Teil "-> get ()" aus Ihrer Abfrage entfernen.
quelle
Ich würde empfehlen, die Chrome-Erweiterung Clockwork mit dem Laravel-Paket https://github.com/itsgoingd/clockwork zu verwenden . Es ist einfach zu installieren und zu verwenden.
quelle
Da der Profiler in Laravel 4 noch nicht verfügbar ist , habe ich diese Hilfsfunktion erstellt, um zu sehen, wie SQL generiert wird:
HINWEIS : Setzen Sie das Flag $ all auf false, wenn Sie nur die letzte SQL-Abfrage wünschen.
Ich behalte diese Art von Funktionen in einer Klasse namens DBH.php (kurz für Database Helper), damit ich sie von überall wie folgt aufrufen kann:
Hier ist die Ausgabe, die ich bekomme:
Falls Sie sich fragen, verwende ich Kint für die Formatierung von dd (). http://raveren.github.io/kint/
quelle
if($all == false)
? Warum nicht einfachif(!$all)
Für Laraver 4 ist es
quelle
Hier ist ein kurzer Javascript-Ausschnitt, den Sie auf Ihre Masterseitenvorlage werfen können. Solange es enthalten ist, werden alle Abfragen an die Javascript-Konsole Ihres Browsers ausgegeben. Sie werden in einer leicht lesbaren Liste gedruckt, sodass Sie ganz einfach auf Ihrer Website stöbern und sehen können, welche Abfragen auf jeder Seite ausgeführt werden.
Wenn Sie mit dem Debuggen fertig sind, entfernen Sie es einfach aus Ihrer Vorlage.
quelle
DB::getQueryLog()
ein Array zurückgegeben wird, muss es nicht mit "" umgeben werden.json_encode
wird es entsprechend übersetzen.Laravel 5
Beachten Sie, dass dies der prozedurale Ansatz ist, den ich für das schnelle Debuggen verwende
Verwenden Sie in Ihrem Header:
Die Ausgabe sieht ungefähr so aus (Standardprotokolldatei ist laravel.log ):
*** Ich weiß, dass diese Frage Laravel 3/4 angegeben hat, aber diese Seite wird angezeigt, wenn nach einer allgemeinen Antwort gesucht wird. Neulinge in Laravel wissen möglicherweise nicht, dass es einen Unterschied zwischen den Versionen gibt. Da ich
DD::enableQueryLog()
in keiner der Antworten, die ich normalerweise finde, erwähnt werde, kann es spezifisch für Laravel 5 sein - vielleicht kann jemand dies kommentieren.quelle
Sie können auch auf Abfrageereignisse warten, indem Sie Folgendes verwenden:
Informationen finden Sie in den Dokumenten hier unter Abhören von Abfrageereignissen
quelle
Wenn Sie das Abfrageprotokoll verwenden, erhalten Sie nicht die tatsächlich ausgeführte RAW-Abfrage, insbesondere wenn gebundene Werte vorhanden sind. Dies ist der beste Ansatz, um die rohe SQL zu erhalten:
oder mehr beteiligt:
quelle
Wenn Sie Laravel 5 verwenden, müssen Sie dies vor der Abfrage oder in der Middleware einfügen:
quelle
Alternativ zum Laravel 3-Profiler können Sie Folgendes verwenden:
https://github.com/paulboco/profiler oder https://github.com/barryvdh/laravel-debugbar
quelle
In Laravel 4 können Sie einen Ereignis-Listener für Datenbankabfragen verwenden.
Platzieren Sie dieses Snippet an einer beliebigen Stelle, z
start/global.php
. Die Abfragen werden in das Info-Protokoll (storage/log/laravel.log
) geschrieben.quelle
Wenn Sie es in die Datei global.php einfügen, wird Ihre SQL-Abfrage protokolliert.
quelle
Der Loic Sharma SQL Profiler unterstützt Laravel 4, ich habe es gerade installiert. Die Anweisungen sind hier aufgeführt . Die Schritte sind die folgenden:
"loic-sharma/profiler": "1.1.*"
den erforderlichen Abschnitt in composer.json hinzuphp composer.phar self-update
in der Konsole durch.php composer.phar update loic-sharma/profiler
in der Konsole durch `'Profiler\ProfilerServiceProvider',
das Provider-Array in app.php hinzu'Profiler' => 'Profiler\Facades\Profiler',
das Aliasse-Array auch in app.php hinzuphp artisan config:publish loic-sharma/profiler
in der Konsole ausquelle
Letzter Abfragedruck
quelle
L4 Einzeiler
(welche Abfrage schreiben):
$q=\DB::getQueryLog();dd(end($q));
quelle
Laravel 3
Ein anderer Weg, dies zu tun, ist:
Für alle Abfragen Ergebnis:
Für das letzte Ergebnis:
quelle
Um die zuletzt ausgeführte Abfrage in Laravel zu erhalten, verwenden wir die
DB::getQueryLog()
Funktion von Laravel, die alle ausgeführten Abfragen zurückgibt. Um die letzte Abfrage zu erhalten, verwenden wir eineend()
Funktion, die die zuletzt ausgeführte Abfrage zurückgibt.Ich habe auf http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php verwiesen .
quelle
Es gibt eine sehr einfache Möglichkeit, dies zu tun. Wenn Sie in Ihrer Laravel-Abfrage einfach einen beliebigen Spaltennamen umbenennen, wird ein Fehler bei Ihrer Abfrage angezeigt. :)
quelle