首页 > 解决方案 > 在 Laravel 中获取执行的 sql 查询

问题描述

我正在尝试将执行的 sql 查询附加到我的请求中。不幸的是我的 $logs 数组是空的。

$logs = [];

\DB::listen(function ($query) use ($logs) {
   print_r($query->sql); // print_r here works
   $logs[] = $query;
});
print_r($logs); // here $logs is empty

为什么我的 $logs 数组是空的,但在 DB::listen print_r() 里面有效?如何修复它以在 $logs 数组中获取我的查询?

标签: phplaravel

解决方案


::listen()问题是在方法内部执行的代码与之前和之后的行之间的执行时间存在差异。

里面的代码将在发送查询时执行,而其他代码在您的应用程序启动时执行。因此,在将函数绑定到 Database 门面之后,还没有执行任何查询并且$logs将为空。

用于记录

您可以尝试让 DB 侦听器将查询写入文件或查看这篇文章:https ://stackoverflow.com/a/27753889/2142071

添加到请求

listen方法内部使用请求对象中可用request()->request->add(['sql', $query->sql]);sql变量。


推荐阅读