Laravel 注册监听器,实时打印SQL语句
使用 laravel 框架开发的时候,有时候需要测试一段代码生产的 SQL 语句,这里分享一种通过注册监听器的方法查看实时的SQL语句。
第一步:创建监听器
php artisan make:listener QueryListener --event=illuminate.query
生成新文件 app/Listeners/QueryListener.php,然后删除该文件顶部的
use App\Events\illuminate.query;
这句代码, 这是自动生成的。
第二步:注册事件
打开 app/Providers/EventServiceProvider.php,在 $listen 中添加事件的监听器为 QueryListener:
protected $listen = [ 'Illuminate\Database\Events\QueryExecuted' => [ 'App\Listeners\QueryListener', ] ];
第三步:添加逻辑
修改上面生成的文件,我们把 SQL 查询记录到日志里,最后这个文件的完整代码如下:
<?php namespace App\Listeners; use Illuminate\Database\Events\QueryExecuted; use Illuminate\Support\Facades\Log; class QueryListener { public function handle(QueryExecuted $event) { //只在开发环境记录 if (env('APP_ENV', 'production') == 'local') { $sql = str_replace("?", "'%s'", $event->sql); if ($event->bindings) { $log = vsprintf($sql, $event->bindings); } else { $log = $sql; } Log::info($log); } } }
然后运行命令
tail -f storage/logs/laravel-2019-06-26.log
监视一下日志文件,应该就能看到类似下面的SQL语句了:
[2019-07-10 02:45:39] local.INFO: update `phpernote_article` set `type` = "2", `updated_at` = "2019-07-10 02:45:39" where `id` = "2"
PHP之友评论