Laravel实时监听打印SQL

吴宇 2019-11-19 24℃ 1条

Laravel5如何实现打印sql,Elequent ORM ->toSql() 可以输出sql语句,但如果带binding参数的,输出的语句会带?。可以通过事件监听器来记录sql语句到日志中。

       Elequent ORM ->toSql() 可以输出sql语句,但如果带binding参数的,输出的语句会带?,类似下面这样:

select * from `rooms` where `rooms`.`project_id` = ?

       barryvdh/laravel-debugbar这个包需要添加代码注入配置,仅限浏览器输出,如果是postman工具调试,就无法查看输出的SQL了。

       下面通过事件监听器将sql语句保存到 Log 日志中:

       1、首先,创建监听器

php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted

       2、打开 app/Providers/EventServiceProvider.php ,在 $listen 中添加

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

       3、打开 QueryListener 文件

use \Log;
public function handle (QueryExecuted $event)
{
    if (env('APP_ENV', 'production') == 'local') {
        $sql = str_replace("?", "'%s'", $event->sql);
        $log = vsprintf($sql, $event->bindings);
        Log::info($log);
    }
}
标签: phplaravel

非特殊说明,本博所有文章均为博主原创。