口才显示查询日志

use App\Order;
 

public function show(Order $order) {
$data = $order->all();
return dd($order->getQueryLog());

有什么方法可以显示雄辩在 Laravel 建立的查询?

我试过 getQueryLog();,但是没有用

181774 次浏览

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

DB::enableQueryLog();
DB::getQueryLog();

如果你想看到真实的查询,你可以使用 Laravel Debugbar,它会显示当前请求期间 Laravel 创建的所有真实的查询。

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

首先必须启用查询日志 可以用

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

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

$queries = DB::getQueryLog();

如果您希望查看最后执行的查询

$last_query = end($queries);

要了解更多关于日志的信息,请看这个 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);
}

我知道这是一个老问题,但它可能会帮助其他人,有同样的问题,我有。

如果使用的是默认连接以外的其他连接,则应指定该连接以正确获取查询日志。

\DB::connection('YourConnection')->enableQueryLog();
$test = MyModel::all();
$queries = \DB::connection('YourConnection')->getQueryLog();
dd($queries);

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

然后在 config/app.php 中,这样就可以很容易地启用/禁用修改. env 的命令

    'log_sql' => env('LOG_SQL'),

所有信用: https://arjunphp.com/laravel-5-5-log-eloquent-queries/

可以通过以下方式解析独特的查询:

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

如下所示,你可以使用 ::toSql()->toSql():

use App\Order;


public function show(Order $order){


return $order::toSql();

或者

use App\Order;


public function show(Order $order){


return $order::where("id", "<>", 0)->toSql();

您可能需要启用查询日志:

DB::enableQueryLog();

要查看 laravel.log文件中的查询日志,请更新 app/Providers/AppServiceProvider.php

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,
[
'bindings' => $query->bindings,
'time' => $query->time
]
);
});
}


// ...
}

你可以使用我的 Laravel 软件包,它在 Larav6和7中运行良好。(幼虫5个或更少不确定。)

有用的 通过下面的命令,通过作曲家: 安装软件包

composer require dipenparmar12/laravel-query-log

重新启动服务器。 在这之后你会看到

包含查询日志的 storage/logs/db-query.log文件。

详情请浏览 Laravel 查询日志

谢谢

您可以使用这个包 https://github.com/supliu/laravel-query-monitor

安装,打开终端,执行命令:

php artisan laravel-query-monitor

Eloquent 执行的所有查询都将实时显示

在查询 DB: : ableleQueryLog ()之前编写此代码;

DB::enableQueryLog();


$data = $order->all();


$query = DB::getQueryLog();


dd($query);

查询执行

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
$sql = $query->sql;
$time = $query->time;
$connection = $query->connection->getName();
 

Log::debug('query : '.$sql);
Log::debug('time '.$time);
Log::debug('connection '.$connection);
});

质疑

StaffRegister::all();

输出

[2021-03-14 08:00:57] local.DEBUG: query : select * from `staff_registers`
[2021-03-14 08:00:57] local.DEBUG: time 0.93
[2021-03-14 08:00:57] local.DEBUG: connection mysql

完整的结构

<?php


namespace App\Http\Controllers;


use Illuminate\Support\Facades\Log;
use App\Models\StaffRegister;


class AuthController extends Controller
{
public function index(){
   

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
      

$sql = $query->sql;
$time = $query->time;
$connection = $query->connection->getName();


Log::debug('query : '.$sql);
Log::debug('time '.$time);
Log::debug('connection '.$connection);
});


$obj = StaffRegister::all();
    

return $obj;
}
}

准确的方法

如果您正在使用 Laravel 6 + (我还没有检查到6以下) ,您可以使用

// show sql and bindings  +  stop execution
DB::table('your_table')->dd();


// show sql and bindings
DB::table('your_table')->dump();

Https://laravel.com/docs/7.x/queries#debugging

在开发过程中,我用来检查查询的一种简单而快速的方法是,在组或顺序句的列名中犯一个自愿的错误,然后 sql 查询将显示在调试器窗口的左上角框架中。

它并不完美,因为没有用“’”显示日期时间,但是它简单、快速,并且不需要添加或启用任何其他内容。