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

DB :: getQueryLog返回空数组

$user = User::find(5);
print_r(DB::getQueryLog());

result是空数组

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 
    }
);  

一些技巧

多个DB连接

如果您有多个数据库连接,则必须指定它

启用my_connection的查询日志

DB::connection('my_connection')->enableQueryLog();

获取my_connection的查询日志

print_r(
   DB::connection('my_connection')->getQueryLog()
);

2.在哪里启用查询日志?

对于HTTP请求生命周期,您可以启用一些BeforeAnyDbQueryMiddleware middleware的查询日志句柄方法,然后在同一中间件的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();
        );
    }
}

Middlewares链不会运行工艺命令,因此对于CLI执行,您可以启用查询日志on 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();
}

参考文献

> https://laravel.com/docs/5.0/database#query-logging

转载注明原文:php – 如何在Laravel 5中执行查询? DB :: getQueryLog返回空数组 - 代码日志