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

You will need to enable the query log by calling:

DB::enableQueryLog();

or register an event listener:

DB::listen(

function ($sql, $bindings, $time) {

// $sql - select * from `ncv_users` where `ncv_users`.`id` = ? limit 1

// $bindings - [5]

// $time(in milliseconds) - 0.38

}

);

Some Tips

1. Multiple DB connections

If you have more than one DB connection you must specify which connection to log

To enables query log for my_connection:

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

To get query log for my_connection:

print_r(

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

);

2. Where to enable query log ?

For an HTTP request lifecycle, you can enable query log in the handle method of some BeforeAnyDbQueryMiddleware middleware and then retrieve the executed queries in the terminate method of the same middleware.

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()

);

}

}

A middleware's chain will not run for artisan commands, so for CLI execution you can enable query log in the artisan.start event listener.

For example you can put it in the bootstrap/app.php file

$app['events']->listen('artisan.start', function(){

\DB::enableQueryLog();

});

3. Memory

Laravel keeps all queries in memory. So in some cases, such as when inserting a large number of rows, or having a long running job with a lot of queries, this can cause the application to use excess memory.

In most cases you will need the query log only for debugging, and if that is the case I would recommend you enable it only for development.

if (App::environment('local')) {

// The environment is local

DB::enableQueryLog();

}

References

你可能感兴趣的:(mysql,getquerylog)