Laravel 配置 SqlDebug 服务,进行实时监听打印 SQL
发布日期:2021-05-09 04:16:34 浏览次数:14 分类:博客文章

本文共 1316 字,大约阅读时间需要 4 分钟。

0:释义

什么是服务容器简而言之,Laravel 服务容器 是一个用于存储绑定组件的盒子,它还会为应用提供所需的服务。Laravel 服务容器是用于管理类的依赖和执行依赖注入的工具,By Laravel 文档。什么是服务提供者如果说服务容器是提供绑定和依赖注入的的工具,那么 服务提供者 则是实现绑定的工具。

1:自定义服务提供者

php artisan make:provider SqlDebugServiceProvider# Explanation:# SqlDebugServiceProvider 自定义服务提供者的名字

2:注册自定义服务提供者

为了完成注册服务提供者的功能,仅需要将类名加入到 config/app.php 配置文件的 providers 节点。
'providers' => [        /*         * Application Service Providers...         */        App\Providers\AppServiceProvider::class,        App\Providers\AuthServiceProvider::class,        // App\Providers\BroadcastServiceProvider::class,        App\Providers\EventServiceProvider::class,        App\Providers\RouteServiceProvider::class,        /**         * SQL 监听服务         */        App\Providers\SqlDebugServiceProvider::class,    ],

3: 在 中 boot 方法中增加 SQL 监听服务

\DB::listen(function ($query) {    $tmp = str_replace('?', '"' . '%s' . '"', $query->sql);    $qBindings = [];    foreach ($query->bindings as $key => $value) {        if (is_numeric($key)) {            $qBindings[] = $value;        } else {            $tmp = str_replace(':' . $key, '"' . $value . '"', $tmp);        }    }    $tmp = vsprintf($tmp, $qBindings);    $tmp = str_replace("\\", "", $tmp);    \Log::debug('[execution time: ' . $query->time . 'ms] ' . $tmp);});

4: 会发现在 /storage/logs/ 目录下生成对应的 SQL 文件

上一篇:Laravel - 自定义命令 - 创建 service 服务层文件
下一篇:Laravel 定时任务调度 的 Artisan 命令调度

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月02日 09时31分18秒