我正在尝试将执行的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数组?
答案 0 :(得分:0)
问题在于::listen()
方法内部执行的代码与前后的行之间的执行时间有所不同。
内部代码将在发送查询时执行 ,而其他代码将在应用启动时执行。因此,将功能绑定到数据库外观后,尚无查询执行,$logs
将为空。
用于记录
您可以尝试让DB侦听器将查询写到文件中,或者看看这篇文章:https://stackoverflow.com/a/27753889/2142071
用于添加到请求
在listen
方法内部,使用request()->request->add(['sql', $query->sql]);
在请求对象中提供sql
变量。