laravel 框架列印sql語句
阿新 • • 發佈:2020-11-04
在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語句