laravel调试数据库需先确认app_env=local且app_debug=true,再通过db::enablequerylog()临时捕获或在appserviceprovider中用db::listen()全局记录sql;推荐使用telescope可视化分析查询详情。

遇到 Laravel 数据库报错时,光看错误信息往往不够,关键是要看到 Laravel 实际执行了哪条 SQL、参数是什么、执行是否超时或出错。开启并查看 SQL 查询日志,是定位数据库问题最直接有效的方式。
确认当前环境已启用查询日志
Laravel 默认只在 本地开发环境(APP_ENV=local) 下自动记录查询日志;生产环境默认关闭,且强制开启有安全与性能风险。请先检查 .env 文件:
- APP_ENV=local(确保不是 production)
- APP_DEBUG=true(部分日志依赖调试模式)
若环境正确但仍未输出日志,需手动启用:
临时开启查询日志(适合调试单个请求)
在控制器、命令或 Tinker 中插入以下代码,即可实时捕获本次请求的所有 SQL:
DB::enableQueryLog(); // 开启
// 执行你的查询,例如:
User::where('active', 1)->get();
$queries = DB::getQueryLog(); // 获取所有记录
dd($queries); // 查看结构:含 query、bindings、time(毫秒)等
注意:该方式不会自动记录 migrations、artisan 命令或队列任务中的查询,仅限当前请求生命周期。
全局开启查询日志(开发期推荐)
在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
if (app()->environment('local')) {
DB::listen(function ($query) {
Log::info('SQL Query', [
'sql' => $query->sql,
'bindings' => $query->bindings,
'time' => $query->time,
]);
});
}
这样每次查询都会写入 storage/logs/laravel.log,格式清晰,支持搜索和时间追踪。
使用 Laravel Telescope(可视化调试利器)
如果项目已安装 Laravel Telescope,它会自动捕获并展示所有查询,包括:
- 完整 SQL 语句(带高亮和参数替换)
- 执行耗时、连接池状态、慢查询标记
- 关联的请求、响应、异常上下文
安装后访问 /telescope 即可直观排查,比纯日志更高效。











