php - 在 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 数组中获取我的查询?
解决方案
::listen()
问题是在方法内部执行的代码与之前和之后的行之间的执行时间存在差异。
里面的代码将在发送查询时执行,而其他代码在您的应用程序启动时执行。因此,在将函数绑定到 Database 门面之后,还没有执行任何查询并且$logs
将为空。
用于记录
您可以尝试让 DB 侦听器将查询写入文件或查看这篇文章:https ://stackoverflow.com/a/27753889/2142071
添加到请求
在listen
方法内部使用请求对象中可用request()->request->add(['sql', $query->sql]);
的sql
变量。
推荐阅读
- python - 在使用 test_client.post 的测试中,vcrpy 录音带没有录音
- angular - Angular检测表单变化
- google-chrome - 客户端证书身份验证不适用于 chrome 和 apache2 服务器
- firebase - Service Worker DOMException:注册失败 - 存储错误
- r - 使用 cumsum 创建一个新表 - 代码似乎不起作用?
- reactjs - TypeError:无法读取 Redux-Observable 中未定义的属性“管道”
- python - 运行两个不同的 python 程序并同步它们的变量
- unicode - Unicode 中的中文、日文和韩文字符是什么
- c# - 如何在单声道中正确使用我的 .so 文件?
- android - Gradle 同步失败。找不到 com.android.tools.build:gradle:3.4.0