Laravel 中输出 SQL 语句的到 log 日志
在 AppServiceProvider.php 中的 boot 方法中添加如下代码 即可
public function boot()
{
\DB::listen(function($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$tmp = vsprintf($tmp, $query->bindings);
$tmp = str_replace("\\","",$tmp);
\Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
});
}
运行原生 SQL 查询 使用?绑定参数时上边是可行的 但是使用命名绑定参数时参数没有填充到语句中
下边的解决了使用命名绑定 参数没有填充到 sql 语句的问题#
\DB::listen(function ($query) {
$tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
$qBindings = [];
foreach ($query->bindings as $key => $value) {
if (is_numeric($key)) {
$qBindings[] = $value;
} else {
$tmp = str_replace(':'.$key, '"'.$value.'"', $tmp);
}
}
$tmp = vsprintf($tmp, $qBindings);
$tmp = str_replace("\\", "", $tmp);
\Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
}
);
执行与数据库相关的操作会在 storage\logs\laravel.log 文件中看到记录执行的 sql 语句
(5.1 版本 请看回复区)
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: