Laravel 注册监听器,实时打印SQL语句

PHP 投稿 13200 0 评论

Laravel 注册监听器,实时打印SQL语句

这篇关于Laravel 注册监听器,实时打印SQL语句的文章,觉得挺不错的,感兴趣的php开发者可以参考下,希望对大家在学习php的成长路上有所帮助!

使用 laravel 框架开发的时候,有时候需要测试一段代码生产的 SQL 语句,这里分享一种通过注册监听器的方法查看实时的SQL语句。

第一步:创建监听器


php artisan make:listener QueryListener --event=illuminate.query

生成新文件 app/Listeners/QueryListener.php,删除该文件自动填充的所有代码,以下面的代码替换: 


<?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) {
                $sql = vsprintf($sql, $event->bindings);
            }
            //if ($event->time > 10) //只监听运行时间大于10毫秒的SQL语句
            Log::info($log);
        }
    }
}

第二步:注册事件

打开 app/Providers/EventServiceProvider.php,在 $listen 中添加事件的监听器为 QueryListener:


protected $listen = [
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\QueryListener',
        ]
    ];

然后运行命令


tail -f storage/logs/laravel-2019-06-26.log

监视一下日志文件,应该就能看到类似下面的SQL语句了:

[2019-07-10 02:45:39] local.INFO: update `feishuai_article` set `type` = "2", `updated_at` = "2019-07-10 02:45:39" where `id` = "2"

总结

以上就是关于Laravel 注册监听器,实时打印SQL语句全部内容,希望这篇文章能够帮你解决如相关的PHP问题,更多请关注PHP栏目的其它相关文章!

编程笔记 » Laravel 注册监听器,实时打印SQL语句

赞同 (70) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽