永州网,内容丰富有趣,生活中的好帮手!
永州网 > 生活 > 正文

获取Laravel 5中执行的查询的方法:DB::getQueryLog()为何返回空数组?

时间:2019-10-07 08:13:11

相关推荐

获取Laravel 5中执行的查询的方法:DB::getQueryLog()为何返回空数组?

在Laravel 5中,要获取执行的查询可以使用DB::getQueryLog()方法,但有时可能会遇到该方法返回空数组的问题。这通常是由于查询日志未被记录或者在所查询的代码中出现了错误。为了解决这个问题,需要确保在执行查询之前开启了查询日志功能,并且查询语句正确无误。另外,还可以检查是否有其他地方对查询日志进行了清空操作,导致返回的是空数组。通过排查以上可能的原因,可以解决DB::getQueryLog()返回空数组的问题。

我正在尝试查看查询的日志,但DB :: getQueryLog()只是返回一个空数组:

$user = User::find(5);print_r(DB::getQueryLog());

结果

Array()

如何查看此查询的日志?

解决方法:

默认情况下,Laravel 5中禁用查询日志:

/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448

您需要通过调用以下命令启用查询日志:

DB::enableQueryLog();

或注册事件监听器:

DB::listen( function ($sql, $bindings, $time) { // $sql - select * from `ncv_users` where `ncv_users`.`id` = ? limit 1 // $bindings - [5] // $time(in milliseconds) - 0.38 });

一些技巧

1.多个DB连接

如果您有多个数据库连接,则必须指定要记录的连接

要为my_connection启用查询日志:

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

要获取my_connection的查询日志:

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

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

对于HTTP请求生命周期,您可以在某些BeforeAnyDbQueryMiddlewaremiddleware的handle方法中启用查询日志,然后在同一中间件的terminate方法中检索已执行的查询.

class BeforeAnyDbQueryMiddleware{ public function handle($request, Closure $next) { DB::enableQueryLog(); return $next($request); } public function terminate($request, $response) { // Store or dump the log data... dd( DB::getQueryLog() ); }}

中间件的链不会针对工匠命令运行,因此对于CLI执行,您可以在artisan.start事件侦听器中启用查询日志.

例如,您可以将它放在bootstrap / app.php文件中

$app['events']->listen('artisan.start', function(){ \DB::enableQueryLog();});

记忆

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

在大多数情况下,您只需要查询日志以进行调试,如果是这种情况,我建议您仅为开发启用它.

if (App::environment('local')) { // The environment is local DB::enableQueryLog();}

参考

>/docs/5.0/database#query-logging

来源:/content-1-453751.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(2)
  1. 幽兰--风儿2022-01-03 11:51幽兰--风儿[吉林省网友]123.206.157.242
    我遇到过同样的问题,后来发现是我在查询执行之前调用了getQueryLog()函数,导致返回的是空数组。一定要在执行查询之后才能获取到正确的查询日志。
    顶4踩0
  2. 戱 墨2020-11-19 22:02戱 墨[国外网友]202.165.252.32
    可能是因为查询日志功能没有被启用,可以尝试在配置文件中设置debug => true来开启查询日志功能。
    顶0踩0
相关阅读
如何使用快捷指令来获取天气并进行朗读

如何使用快捷指令来获取天气并进行朗读

要使用快捷指令朗读天气,首先需要在设备上安装快捷指令应用

2024-03-04

ASP.NET中如何防范SQL注入式攻击

ASP.NET中如何防范SQL注入式攻击

通过输入恶意的SQL代码,攻击者可以绕过应用程序的安全验证,访问、修改、删除数据库中的数据,甚至获取敏感信息

2024-03-12

SpaceX星舰第三次试飞任务提前结束:返回大气层后信号丢失!下次见

SpaceX星舰第三次试飞任务提前结束:返回大气层后信号丢失!下次见

它拥有业界领先的视觉能力和卓越的基准测试表现,是广泛企业应用场景的灵活解决方案

2024-03-15

在Spring中用select last insert id()时遇到问题

在Spring中用select last insert id()时遇到问题

这个问题通常涉及数据库操作的事务管理和自动生成的ID的获取

2023-03-05

JAVA 经典面试题:ES如何做到亿级数据查询毫秒级返回?

JAVA 经典面试题:ES如何做到亿级数据查询毫秒级返回?

我们将探讨ES的索引优化、分片设置、查询优化等方面的技术,以及JAVA代码中如何与ES进行高效交互

2024-03-15