Heim > PHP-Framework > Laravel > Hauptteil

So drucken Sie ausgeführte SQL-Anweisungen in Laravel (zwei Methoden)

PHPz
Freigeben: 2023-04-09 09:30:01
Original
6163 Leute haben es durchsucht

Es ist üblich, Eloquent ORM zum Abfragen der Datenbank in Laravel zu verwenden, aber wenn wir mit komplexen Abfrageanforderungen konfrontiert werden, müssen wir das Debuggen durchführen, indem wir die ausgeführten SQL-Anweisungen anzeigen.

Laravel bietet zwei Möglichkeiten zum Drucken ausgeführter SQL-Anweisungen: eine über die Protokollausgabe und die andere über das Drucken von Ereignis-Listenern.

Über die Protokollausgabe

SQL-Anweisungen, die über die Protokollausgabe in Laravel ausgeführt werden, sind der bequemste Weg, und in jeder Umgebung gibt es entsprechende Protokollierungs- und Anzeigemethoden.

Wir können die Protokollierung von SQL-Anweisungen in der Konfigurationsdatei aktivieren:

// 在config/database.php文件中,找到default下的connections数组,增加以下选项:
'log_queries' => true,  // 开启SQL日志记录
'log_channel' => 'daily', // 日志存储方式,也可使用syslog、errorlog等方式
'log_level' => 'debug', // 日志级别
Nach dem Login kopieren

Nach dem Hinzufügen der Option log_queries zeichnet Laravel automatisch die ausgeführten SQL-Anweisungen auf und die Protokolle werden im Verzeichnis storage/logs ausgegeben.

Nachdem wir die Abfrageanweisung im Code ausgeführt haben, können wir die SQL-Anweisung auf folgende Weise ausgeben:

DB::enableQueryLog();
// 执行查询语句
$users = DB::table('users')->get();
// 获取执行的SQL语句
$sql = DB::getQueryLog()[0]['query'];
Nach dem Login kopieren

Im obigen Code rufen Sie zunächst die Methode DB::enableQueryLog() auf, um die Aufzeichnung der SQL-Anweisung zu aktivieren Abfrage können Sie die Methode DB::getQueryLog() verwenden, um alle ausgeführten SQL-Anweisungen abzurufen. Wenn Sie die letzte SQL-Anweisung abrufen möchten, können Sie auch die Methode DB::getLastQuery() verwenden.

Es ist jedoch zu beachten, dass die Verwendung dieser Methode zum Aufzeichnen einer großen Anzahl von SQL-Anweisungen in einer Produktionsumgebung zu einer Erhöhung des Protokollvolumens führt, was der Systemwartung und Fehlerbehebung nicht förderlich ist. Zeichnen Sie daher SQL-Anweisungen nicht häufig auf Protokolle in einer Produktionsumgebung.

Über Ereignis-Listener bietet Laravel eine Möglichkeit, SQL-Ausführungsereignisse abzuhören. Diese Methode ist sicherer und zuverlässiger und generiert keine große Anzahl von Protokollen in der Produktionsumgebung .

Durch die Definition eines Listeners kann die entsprechende SQL-Anweisung beim Ausführen einer beliebigen Abfrageanweisung ausgedruckt werden. Das Folgende ist der Implementierungscode:

// 在AppServiceProvider的boot方法中,添加以下代码
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Events\QueryExecuted;
use Log;

// 注册SQL执行监听器
DB::listen(function (QueryExecuted $queryExecuted) {
    $sql = str_replace("?", "'%s'", $queryExecuted->sql);
    $bindings = $queryExecuted->connection->prepareBindings($queryExecuted->bindings);
    $fullSql = vsprintf($sql, $bindings);

    Log::debug('SQL:'.$fullSql);
});
Nach dem Login kopieren

Im obigen Code verwenden wir DB::listen(), um einen Ereignis-Listener zu registrieren, der ausgelöst wird, wenn eine Abfrageanweisung ausgeführt wird.

Im Listener werden die SQL-Anweisung der aktuellen Abfrage sowie zugehörige Bindungsparameter und andere Informationen über das QueryExecuted-Ereignis abgerufen und dann über die Methode Log::debug() an das Protokoll ausgegeben.

Durch die beiden oben genannten Methoden haben wir das Ziel erreicht, SQL-Anweisungen in Laravel zu drucken, was das Debuggen und die Fehlerbehebung komfortabler machen kann und eine unersetzliche Rolle in der Entwicklung spielt.

Das obige ist der detaillierte Inhalt vonSo drucken Sie ausgeführte SQL-Anweisungen in Laravel (zwei Methoden). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage