laravel 框架打印sql语句
在laravel 中使用ORM 写SQL查询时,确实写起来很快,但是当我们写复杂查询或者优化SQL时,为了心里有底,基本会想去打印laravel执行后的原始sql语句
laravel 中打印语句有一些三种方式
1. 讨巧的方式,SQL语句故意写错,运行后查询laravel的报错信息中,这种方式只可看到sql执行的第一条语句
2. 原生打印: sql语句和参数是分开的
DB::connection()->enableQueryLog(); User::query()->where(['id' => 1])->first(); dd( DB::getQueryLog());
返回
array:1 [ 0 => array:3 [ "query" => "select * from `user` where (`id` = ?) limit 1" "bindings" => array:1 [ 0 => 1 ] "time" => 123.48 ] ]
3. 在2的基础上进一步处理
在 App\Providers\AppServiceProvider 文件中的boot函数添加如下内容 (local环境)
if (config('app.env') === 'local') { DB::listen(function ($query) { $sql = array_reduce($query->bindings, function($sql, $binding) { return preg_replace('/\?/', is_numeric($binding) ? $binding : sprintf("'%s'", $binding), $sql, 1); }, $query->sql); Log::info($sql); }); }
即可在日志中查看完整的sql语句

浙公网安备 33010602011771号