我正在尝试查看查询的日志,但DB::getQueryLog()
只是返回一个空数组:
$user = User::find(5);
print_r(DB::getQueryLog());
结果
Array
(
)
如何查看此查询的日志?
发布于 2015-01-03 18:33:07
默认情况下,在Laravel 5中禁用查询日志:https://github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448
您需要通过调用以下命令来启用查询日志:
DB::enableQueryLog();
// and then you can get query log
dd(DB::getQueryLog());
或者注册一个事件监听器:
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请求生命周期,您可以在某些BeforeAnyDbQueryMiddleware
中间件的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()
);
}
}
中间件的链不会为artisan命令运行,因此对于CLI执行,您可以在artisan.start
事件侦听器中启用查询日志。
例如,您可以将其放在bootstrap/app.php
文件中
$app['events']->listen('artisan.start', function(){
\DB::enableQueryLog();
});
3.记忆
Laravel将所有查询保存在内存中。因此,在某些情况下,例如插入大量行,或者具有包含大量查询的长时间运行的作业时,这可能会导致应用程序使用过多的内存。
在大多数情况下,您只需要用于调试的查询日志,如果是这样的话,我建议您只在开发时启用它。
if (App::environment('local')) {
// The environment is local
DB::enableQueryLog();
}
参考
发布于 2016-06-13 20:38:40
如果您真正关心的是用于快速调试目的的实际查询(最后运行的查询):
DB::enableQueryLog();
# your laravel query builder goes here
$laQuery = DB::getQueryLog();
$lcWhatYouWant = $laQuery[0]['query']; # <-------
# optionally disable the query log:
DB::disableQueryLog();
在$laQuery[0]
上执行print_r()
以获取完整的查询,包括绑定。(上面的$lcWhatYouWant
变量将用??
替换)
如果您使用的不是主mysql连接,则需要使用以下内容:
DB::connection("mysql2")->enableQueryLog();
DB::connection("mysql2")->getQueryLog();
(使用您的连接名称,其中"mysql2“是)
发布于 2015-04-16 02:42:43
您需要首先启用查询日志记录
DB::enableQueryLog();
然后,您可以通过以下方式获取查询日志:
dd(DB::getQueryLog());
最好在应用程序启动之前启用查询日志记录,您可以在BeforeMiddleware中这样做,然后在AfterMiddleware中检索已执行的查询。
https://stackoverflow.com/questions/27753868
复制相似问题