Laravelで発行されるSQLは、DB::getQueryLog()
を使えば取得可能です。
ただ、間違いなくクエリを投げているはずなのに、getQueryLog()の結果が空配列になってしまって、悩んでいました。
解決策
どうやらDB::getQueryLog()
で取得できるのは、defaultで設定したコネクションに対して投げられたSQLのみっぽいです。
自分の場合、テーブルを複数のDBに分けて作成していて、別のコネクションに対してのクエリばかりを発行していたために、defaultコネクションに対してはSQLは発行されていませんでした。 なので、発行しているコネクション名を指定する必要があります。
DB::connection('foo')->getQueryLog();
例えば、全コネクションに対して投げられた全てのSQLを取得したい場合は、
$queries = []; foreach (config('database.connections') as $name => $connection) { $queries += DB::connection($name)->getQueryLog(); }
のようにしても取得できます。もちろん、コネクション毎にSQLログを分けたい場合はそのような処理に修正してください。