<?php

namespace App\Providers;

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

class QueryLogServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {
        if (config('app.debug')) {
            DB::listen(function($query) {
                $sql = $query->sql;
                $bindings = $query->bindings;
                $time = $query->time;

                // 格式化SQL语句(替换占位符)
                foreach ($bindings as $binding) {
                    $value = is_numeric($binding) ? $binding : "'".$binding."'";
                    $sql = preg_replace('/\?/', $value, $sql, 1);
                }

                // 记录SQL日志
                Log::channel('sql')->debug('SQL', [
                    'sql' => $sql,
                    'time' => $time.'ms',
                ]);
            });
        }
    }
}