CakePHPにSQLログをオンデマンドでダンプさせる方法はありますか?コントローラーのポイントまでコードを実行し、実行されたSQLを確認したいと思います。
これを試して:
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
ただし、複数のデータソースがある場合は、データソースごとにこれを行う必要があります。
クエリを表示するには4つの方法があります。
これにより、ユーザーモデルに対して実行された最後のクエリが表示されます。
debug($this->User->lastQuery());
これにより、ユーザーモデルの実行されたすべてのクエリが表示されます。
$log = $this->User->getDataSource()->getLog(false, false);
debug($log);
これにより、すべてのクエリのログが表示されます。
$db =& ConnectionManager::getDataSource('default');
$db->showLog();
すべてのクエリログをアプリケーション全体に表示する場合は、view/element/filename.ctpで使用できます。
<?php echo $this->element('sql_dump'); ?>
CakePHP 1.3を使用している場合、これをビューに追加してSQLを出力できます。
<?php echo $this->element('sql_dump'); ?>
したがって、上記の行のみを含む「sql」というビューを作成し、表示したいときにコントローラーでこれを呼び出すことができます。
$this->render('sql');
(app/config/core.php
でデバッグレベルを少なくとも2に設定することも忘れないでください)
cakephp 2.0の場合AppModel.phpでこの関数を記述します
function getLastQuery()
{
$dbo = $this->getDatasource();
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
return $lastLog['query'];
}
Controller Writeでこれを使用するには、echo $ this-> YourModelName-> getLastQuery();
CakePHPに$ this-> Model-> lastQuery();がないのはとてもイライラします。 Handsofatenの修正バージョンを含む2つのソリューションを次に示します。
最後のクエリ実行を印刷するには、/ app_model.phpファイルに次を追加します。
function lastQuery(){
$dbo = $this->getDatasource();
$logs = $dbo->_queriesLog;
// return the first element of the last array (i.e. the last query)
return current(end($logs));
}
次に、出力を印刷するには、次を実行できます。
debug($this->lastQuery()); // in model
OR
debug($this->Model->lastQuery()); // in controller
特定のページリクエストで実行されるすべてのクエリを印刷するには、コントローラー(またはコンポーネントなど)で次を実行します。
$this->render('sql');
ビューが見つからないというエラーがスローされる可能性がありますが、最近のクエリにアクセスできないよりはましです。
(Handsofatenが言ったように、cake/libs/view/elements /に/elements/sql_dump.ctpがありますが、sql.ctpビューを作成せずに上記を行うことができました。誰もそれを説明できますか?)
CakePHP 1.2では..
$db =& ConnectionManager::getDataSource('default');
$db->showLog();
最終的に私にとってうまくいき、2.0とも互換性があるのは、レイアウト(またはモデル)を追加することです
<?php echo $this->element('sql_dump');?>
また、Config/core.phpに設定されたデバッグ変数にも依存します
CakeのプラグインDebugKitも同様に機能します。 https://github.com/cakephp/debug_kit