簡單實現Laravel獲取當前執行的SQL

lengqy發表於2020-12-21

其實在執行程式碼的同時看一看當前的SQL是一個好習慣,一方面可以檢查一下程式碼的錯誤,另一方面可以檢查一下模型關聯是否因為沒有使用 with而導致多次查詢。

新建一個檔案 app\Listeners\QueryListener.php

<?php 

namespace App\Listeners;

use Illuminate\Database\Events\QueryExecuted;

class QueryListener  
{
    public function handle(QueryExecuted $event)  
    {
        $sql = str_replace("?", "'%s'", $event->sql);

        try {
            $log = vsprintf($sql, $event->bindings);
        } catch (\Exception $e) {
            $log = $sql;
        }

        $file = storage_path('logs/'.date('Ymd').'_sql.txt');
        file_put_contents($file, $log.PHP_EOL, FILE_APPEND);
    }
}

修改 app/Providers/EventServiceProvider.php

protected $listen = [
        'Illuminate\Database\Events\QueryExecuted' => [ 
            'App\Listeners\QueryListener'
        ]
    ];
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章