Php Laravel雄辩地显示查询日志

Php Laravel雄辩地显示查询日志,php,laravel,Php,Laravel,有没有办法显示由Elount在Laravel中构建的查询 我尝试了getQueryLog()但它不起作用要使用getQueryLog()您需要首先启用它: use App\Order; public function show(Order $order) { $data = $order->all(); return dd($order->getQueryLog()); 如果您想查看真实查询,可以使用,它将显示在当前请求期间创建的所有真实查询 有时->toSql

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

我尝试了
getQueryLog()
但它不起作用

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

use App\Order;
 
public function show(Order $order) {
    $data = $order->all();
    return dd($order->getQueryLog());
如果您想查看真实查询,可以使用,它将显示在当前请求期间创建的所有真实查询


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

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

DB::enableQueryLog();
DB::getQueryLog();
然后您可以使用下面的代码查看查询日志

DB::connection()->enableQueryLog();
如果要查看最后执行的查询

$queries = DB::getQueryLog();
要了解有关日志记录的更多信息,请参阅

范例

$last_query = end($queries);

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

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

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

使用5.6,类似于AppServiceProvider::boot()中的内容

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

    // 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.
            }
        });
    }
全部归功于:

这可以通过以下方式解析为唯一查询:

    'log_sql' => env('LOG_SQL'),
您可以使用
::toSql()
->toSql()
,如下所示:

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


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

DB::enableQueryLog();

您可以使用我的Laravel软件包,该软件包在Larave 6和7中运行良好。(不确定laravel 5或更低。)

供使用 通过以下命令通过composer:安装软件包

composer需要dipenparmar12/laravel查询日志

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

存储/logs/db query.log
包含查询日志的文件

欲了解更多详情,请访问

谢谢

您可以使用此软件包

Após instalar,abra o terminal e execute o comando:

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

    // ...
}

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

在查询DB::enableQueryLog()之前写入此命令

查询执行

DB::enableQueryLog();

$data = $order->all();

$query = DB::getQueryLog();

dd($query);
质疑

输出

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  

这是否仅用于数据库查询?我正在使用eloquent,我想看看laravel的queryit也适用于eloquent,检查我在示例中显示的更新答案哦,我不知道我需要使用enableQueryLog();在我提问之前,我把它放在了后面,哈哈,谢谢!很高兴能帮助你,接受这个答案,这样对其他人也可能有用。可能是魔兽世界的复制品,我希望我在几年前就知道了。太有用了!谢谢
php artisan laravel-query-monitor
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;
   }
}