CakePHP3:コントローラで発行されたクエリをログする

debugkitを入れていればSQLは確認できますが、リダイレクト等が入っていて確認できない場合があります。 その対策です。

bootstrap.phpの変更

bootstrap.phpにこれを追加します:

Log::config('queries', [
    'className' => 'File',
    'path'      => LOGS,
    'file'      => 'queries.log',
    'scopes'    => ['queriesLog']
]);

【重用】デバッグモードの無効化

デバッグモードを無効にします(なぜこれをやらねばならないのか、理解に苦しみますが…)

ロギング用のコードの追加

コントローラで:

use Cake\Datasource\ConnectionManager;

を追加し、かつ、ログしたいクエリの周りに:

$connection = ConnectionManager::get('default');
$connection->logQueries(true);
 $this->Orders->save($order);
$connection->logQueries(false);

といった具合にlogQueriesを入れます。

Datasourcesについて

なお、app.phpのDatasourcesの中のlogfalseのままでOKです。

注意点

UPDATE前と後の値に変更がない場合、UPDATEは発行されないようです(したがってログにも出ない)