如何在 Laravel 5 中运行查询? DB::getQueryLog() 返回一个空数组
默认情况下,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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。