Code前端首页关于Code前端联系我们

如何在 Laravel 5 中运行查询? DB::getQueryLog() 返回一个空数组

terry 2年前 (2023-09-25) 阅读数 50 #后端开发

默认情况下,Laravel 5 中禁用查询日志:https://github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448 以下命令启用查询日志:

DB::enableQueryLog() ;

或者注册一个事件监听器:

DB::listen(

function ($sql, $bindings, $time) {

// $sql - select *来自 `ncv_users`,其中 `ncv_users` .`id` = ?limit 1

// $绑定 - [5]

// $时间(以毫秒为单位)- 0.38

}

);

一些技巧

1.多个数据库连接

如果有多个数据库连接,则需要设置日志记录连接

启用查询日志 my_connection:

DB ::connection('my_connection')->enableQueryLog();

获取以下查询日志 my_connection:

print_r(

DB::connection('my_connection')->getQueryLog()

);

2。在哪里启用查询日志?

对于 HTTP 请求生命周期,可以在某个 BeforeAnyDbQueryMiddleware 中间件处理方法中启用查询日志记录,然后在同一中间件方法中终止以检索触发的查询。

类 BeforeAnyDbQueryMiddleware

{

公共函数句柄($request, 闭包$next)

{

DB::enableQueryLog();❙$next(); }

公共函数完成($请求,$响应)

{

// 保存或清除日志数据...

dd(

DB::getQueryLog()

);

}

}

craft 命令不会启动中间件链,因此您可以启用 CLI 执行事件监听器来进行查询日志记录。

例如,您可以将其放入启动文件/文件

$app['events']->listen('', function(){

\DB::enableQueryLog();

} );

3。内存

Laravel 将所有查询存储在内存中。因此,在某些情况下,例如插入大量行或长时间运行具有大量查询的作业时,可能会导致应用程序使用过多的内存。

大多数时候你只需要查询日志进行调试,在这种情况下我建议你仅将其用于开发。

if (App::environment('local')) {

//环境为本地

DB::enableQueryLog();

}

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门