我正在尝试查看查询的日志,但DB :: getQueryLog()只是返回一个空数组: $user = User::find(5);
print_r(DB::getQueryLog());
结果 Array
(
)
如何查看此查询的日志? 解决方法: 默认情况下,Laravel 5中禁用查询日志: https://github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448
您需要通过调用以下命令启用查询日志: DB::enableQueryLog();
或注册事件监听器: 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 middleware的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()
);
}
}
中间件的链不会针对工匠命令运行,因此对于CLI执行,您可以在artisan.start事件侦听器中启用查询日志. 例如,您可以将它放在bootstrap / app.php文件中 $app['events']->listen('artisan.start', function(){
\DB::enableQueryLog();
});
记忆 Laravel将所有查询保存在内存中.因此,在某些情况下,例如插入大量行或具有大量查询的长时间运行作业时,这可能会导致应用程序使用过多的内存. 在大多数情况下,您只需要查询日志以进行调试,如果是这种情况,我建议您仅为开发启用它. if (App::environment('local')) {
// The environment is local
DB::enableQueryLog();
}
参考 > https:///docs/5.0/database#query-logging 来源:https://www./content-1-453751.html
|