


Comment imprimer les instructions SQL exécutées dans Laravel (deux méthodes)
Apr 09, 2023 am 09:30 AM在Laravel中使用Eloquent ORM查询数据库是‘場常見的事情,但是當我们面對一些複雜的查询需求時,需要通过查看执行的SQL语句来进行调试,那么如何打印执行的SQL语句呢?
Laravel提供了两种方式来打印执行的SQL语句,一种是通过日志输出,一种是通过事件监听器打印。
通过日志输出
Laravel中通过日志输出执行的SQL语句是最方便的一种方式,在每个环境中都有相应的日志记录和查看方式。
我们可以在配置文件中打开SQL语句的日志记录:
// 在config/database.php文件中,找到default下的connections数组,增加以下选项: 'log_queries' => true, // 开启SQL日志记录 'log_channel' => 'daily', // 日志存储方式,也可使用syslog、errorlog等方式 'log_level' => 'debug', // 日志级别
增加log_queries选项后,Laravel会自动记录执行的SQL语句,日志会输出到storage/logs目录下。
在代码中执行查询语句后,我们可以通过下面的方式来输出SQL语句:
DB::enableQueryLog(); // 执行查询语句 $users = DB::table('users')->get(); // 获取执行的SQL语句 $sql = DB::getQueryLog()[0]['query'];
在上面代码中,首先调用DB::enableQueryLog()方法开启记录SQL语句,在执行查询后,可以通过DB::getQueryLog()方法获取所有已执行的SQL语句,如果要获取最后一条SQL语句,也可使用DB::getLastQuery()方法。
但需要注意的是,使用此方式在生产环境中记录大量的SQL语句将会导致日志体积增大,不利于系统的维护和排查问题,因此不要在生产环境中频繁记录SQL语句的日志。
通过事件监听器
Laravel提供了监听SQL执行事件的方式,开发者可以通过监听SQL执行事件来输出SQL语句,这种方式更加安全可靠,不会在生产环境中产生大量的日志。
通过定义监听器,在执行任意查询语句时都可以打印出相应的SQL语句。下面是实现代码:
// 在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); });
在上述代码中,我们用DB::listen()注册一个事件监听器,当任何查询语句执行时都会被触发。
在监听器中通过 QueryExecuted 事件获取到当前查询的 SQL 语句以及相关绑定参数等信息,然后通过 Log::debug() 方法输出到日志中。
通过上述两种方式,我们实现了在Laravel中打印SQL语句的目的,可以更方便地进行调试和排查问题,在开发中起到不可替代的作用。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La dernière méthode de l'installation de Laravel Framework

Comment construire une API RESTful avec des fonctionnalités avancées à Laravel?

Quelle version de Laravel est la meilleure

Quelles sont les meilleures pratiques pour utiliser Laravel dans un environnement natif du cloud?

Comment mettre en œuvre l'authentification et l'autorisation OAuth2 dans Laravel?

Comment puis-je créer et utiliser des règles de validation personnalisées dans Laravel?

Comment créer et utiliser des directives de lame personnalisées à Laravel?
