如何在Laravel 5中执行查询?DB :: getQueryLog()返回空数组

2019-11-0707:44:45后端程序开发Comments2,058 views字数 1127阅读模式

默认情况下,Laravel 5中禁用了查询日志:https : //github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

您将需要通过调用以下命令来启用查询日志:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::enableQueryLog();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

或注册一个事件监听器:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::listen(文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

function ($sql, $bindings, $time) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

//  $sql - select * from `ncv_users` where `ncv_users`.`id` = ? limit 1文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

//  $bindings - [5]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

//  $time(in milliseconds) - 0.38文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

一些技巧文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

1.多个数据库连接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

如果您有多个数据库连接,则必须指定要记录的连接文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

启用查询日志my_connection:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::connection('my_connection')->enableQueryLog();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

获取以下查询日志my_connection:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

print_r(文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::connection('my_connection')->getQueryLog()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

2.在哪里启用查询日志?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

对于HTTP请求生命周期,可以在handle某些BeforeAnyDbQueryMiddleware 中间件的方法中启用查询日志,然后terminate在同一中间件的方法中检索已执行的查询。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

class BeforeAnyDbQueryMiddleware文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

public function handle($request, Closure $next)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::enableQueryLog();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

return $next($request);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

public function terminate($request, $response)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

{文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

// Store or dump the log data...文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

dd(文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::getQueryLog()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

工匠命令不会运行中间件链,因此对于CLI执行,您可以在事件侦听器中启用查询日志。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

例如,您可以将其放入bootstrap/文件中文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

$app['events']->listen('', function(){文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

\DB::enableQueryLog();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

});文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

3.记忆文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

Laravel将所有查询保留在内存中。因此,在某些情况下,例如插入大量行或长时间运行带有大量查询的作业时,这可能导致应用程序使用过多的内存。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

在大多数情况下,您仅需要查询日志进行调试,如果是这种情况,我建议您仅将其用于开发。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

if (App::environment('local')) {文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

// The environment is local文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

DB::enableQueryLog();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17387.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/17387.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定