laravelでデータベースを使っているときに、どうしてもSQLのクエリが見たくなる。 そのようなときには、SQLクエリをlaravelのログに出力しましょう。

スポンサーリンク

ログ出力処理の記述

SQLのログをlaravelログに出力する方法は、ネットを調べると色々出てきます。 僕は面倒臭がり屋なので、そのなかでも一番簡単な方法を選びました。

AppServiceProviderに処理を追加

app/Providers/AppServiceProvider.phpに以下コードを追加します。
※LogやDBのファサードは適時追加してください。

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // 商用環境以外だった場合、SQLログを出力する
        if (config('app.env') !== 'production'){
            DB::listen(function ($query){
                // Log::info("Query Time:[{$query->time}s] $query->sql");
                $sql = $query->sql;
                for ($i = 0; $i < count($query->bindings); $i++) {
                    $sql = preg_replace("/\?/", $query->bindings[$i], $sql, 1);
                }
                Log::info($sql);
            });
        }
    }

これで完了です。 簡単ですね。