ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

【Laravel】SQLを発行しているのに、DB::getQueryLog()で空が返ってくる。

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ログを分けたい場合はそのような処理に修正してください。

お問い合わせプライバシーポリシー制作物