在Laravel中获取执行的SQL查询

时间:2018-10-28 00:44:42

标签: php laravel

我正在尝试将执行的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数组?

1 个答案:

答案 0 :(得分:0)

问题在于::listen()方法内部执行的代码与前后的行之间的执行时间有所不同。

内部代码将在发送查询时执行 ,而其他代码将在应用启动时执行。因此,将功能绑定到数据库外观后,尚无查询执行,$logs将为空。

用于记录

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

用于添加到请求

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