1. 程式人生 > 實用技巧 >laravel 框架列印sql語句

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語句