CakePHPで実行されたSQL文を表示する方法です。
はじめに
CakePHPでORMを用いる際など、クエリの実行結果のみならず 実行されたSQL文を知りたい ケースは多々あると思います。
今回はCakePHPの3系と4系それぞれで、実行されたSQL文をdebugログに表示する方法をお伝えします。
CakePHP 3.X
$connection = \Cake\Datasource\ConnectionManager::get('default'); // DB接続を取得
$connection->logQueries(true); // SQL Queryのログ出力を有効化
$this->Model->find()->all(); // SQL文を確認したいSQLを実行
$connection->logQueries(false); // SQL Queryのログ出力を無効化
CakePHP 4.X
$connection = \Cake\Datasource\ConnectionManager::get('default'); // DB接続を取得
$connection->enableQueryLogging(true); // SQL Queryのログ出力を有効化
$this->Model->find()->all(); // SQL文を確認したいSQLを実行
$connection->disableQueryLogging(); // SQL Queryのログ出力を無効化
出力先
debugログの出力設定に応じたファイルへSQL文が出力されます。
デフォルトでは(CakePHPインストールフォルダ)/cakephp/logs/debug.log
となっています。
注意点
-
\Cake\Datasource\ConnectionManager::get('default');
では指定するDBを間違えないようにしましょう- (レプリカサーバを利用していたのに
get('default')
をget('replica')
と変更し忘れて「動かない!」と騒いでしまった思い出があります・・・)
- (レプリカサーバを利用していたのに
参考
公式リファレンス
CakePHP 4.X
CakePHP 3.X