Laravel Eloquent显示查询日志

Ben*_*n W 21 php laravel

use App\Order;

public function show(Order $order){

        $data = $order->all();
        return dd($order->getQueryLog());
Run Code Online (Sandbox Code Playgroud)

有没有办法在Laravel中显示由Eloquent构建的查询?

我试过getQueryLog();但它不起作用

kap*_*dev 38

首先,您必须启用查询日志,它可以使用

DB::connection()->enableQueryLog();
Run Code Online (Sandbox Code Playgroud)

然后你可以使用下面的代码来查看查询日志

$queries = DB::getQueryLog();
Run Code Online (Sandbox Code Playgroud)

如果你想看到最后执行的查询

$last_query = end($queries);
Run Code Online (Sandbox Code Playgroud)

要了解有关日志记录的更多信息,请参阅此https://laravel.com/docs/5.0/database#query-logging

public function show(Order $order){
        \DB::connection()->enableQueryLog();
        $data = $order->all();
        $queries = \DB::getQueryLog();
        return dd($queries);
}
Run Code Online (Sandbox Code Playgroud)


Muh*_*mad 30

要查看laravel.log文件中的查询日志,请使用以下方式。

namespace App\Providers;

use DB;
use Log;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function($query) {
            Log::info(
                $query->sql,
                $query->bindings,
                $query->time
            );
        });
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,我希望我几年前就知道这一点。太有帮助了!谢谢。 (3认同)

小智 6

将其写在查询 DB::enableQueryLog() 之前;

DB::enableQueryLog();

$data = $order->all();

$query = DB::getQueryLog();

dd($query);
Run Code Online (Sandbox Code Playgroud)


Ale*_*nin 5

要使用它,getQueryLog()您需要先启用它:

DB::enableQueryLog();
DB::getQueryLog();
Run Code Online (Sandbox Code Playgroud)

如果要查看实际查询,可以使用Laravel Debugbar,它将显示在当前请求期间创建的所有Laravel实际查询。

有时->toSql()也很有用。


mar*_*ite 5

在5.6上工作,AppServiceProvider :: boot()中类似这样

    // Log all DB SELECT statements
    // @codeCoverageIgnoreStart
    if (!app()->environment('testing') && config('app.log_sql')) {
        DB::listen(function ($query) {
            if (preg_match('/^select/', $query->sql)) {
                Log::info('sql: ' .  $query->sql);
                // Also available are $query->bindings and $query->time.
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

然后在config / app.php中,就很容易启用/禁用对.env的修改

    'log_sql' => env('LOG_SQL'),
Run Code Online (Sandbox Code Playgroud)

全部归功于:https : //arjunphp.com/laravel-5-5-log-eloquent-queries/

可以使用以下命令对唯一查询进行解析:

    grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u
Run Code Online (Sandbox Code Playgroud)