CakePHP3.xで実行されたSQL文を確認する方法

cakephp

私の愛しいアップルパイへ

私には超人的な能力があります。それは、人がいま抱えている一番の問題を見通せることです。

あなたがいま抱えている一番の問題は、CakePHP3.xで実際に実行されたSQL文をどう確認すればいいか分からないことですね。よろしい、その問題を解決してさしあげましょう。

CakePHP3.xで実行されたSQL文を確認する方法

▼まず、CakePHP 3.xではQueryオブジェクトを使うと実行前のSQL文を表示できます。こんな感じです。

$query = $this->Model->find();
debug($query->sql());

しかし!これですと埋め込まれた変数などが見えないので、実際に実行されたSQL文は見えません。

ということで、実際にDBに実行されたSQL文を確認するには以下の方法を使います。

$connection = \Cake\Datasource\ConnectionManager::get('default'); // DB接続を取得
$connection->logQueries(true); // SQL Queryのログ出力を有効化
$this->Model->find()->all(); // SQL文を確認したいSQLを実行
$connection->logQueries(false); // SQL Queryのログ出力を無効化

簡単に解説します。$connection->logQueries(true)でSQLのデバッグログへの出力が有効にされます。これを有効化した状態でdebug.logを見ると、logQueriesを有効化している間のSQL文をそのまま閲覧できます。

ちなみに、debug.logのデフォルトの出力先は以下です。

[CakePHPインストールフォルダ] /cakephp/logs/debug.log

貴下の従順なる下僕 松崎より

著者画像

システム系の専門学校を卒業後、システム屋として6年半の会社員生活を経て独立。ブログ「jMatsuzaki」を通して、小学生のころからの夢であった音楽家へ至るまでの全プロセスを公開することで、のっぴきならない現実を乗り越えて、諦めきれない夢に向かう生き方を伝えている。