結構書いた人多いと思うが、私は使った時なぜかどうしてもログが出てこなかったので、ここで詰まってる人もいるのかなぁーと思って
まずは、自分のコントローラーにこういうメソッドを追加しましょう
ArticlesController.php
private function getLastQuery() { //privateはあるかどうか構わないがprivateの方をおすすめ
$dbo = $this->Article->getDatasource(); //モデル名はArticleとする時
$logData = $dbo->getLog();
$getLog = end($logData['log']);
$this->log($getLog['query'],LOG_DEBUG);
}
//使うとき
function test(){
$this->Article->find('all');
$this->getLastQuery(); //とりあえず見たいヘルパーの後ろに追加
}
けど偶にこんなように空のログが出る時もある
debug.log
2017-05-09 16:57:10 Debug: Array
(
[log] => Array
(
)
[count] => 0
[time] =>
)
SQLを確認する行為は、debuggerのクラスは2以上じゃないといけない
なのでcakephp/app/Config/core.php
をいじらないといけない
cakephp/app/Config/core.php
Configure::write('debug', 2);
さらに共通のコンポーネントを作りました、よかったら使って見ましょう
QueryComponent.php
<?php
App::uses('AppComponent', 'Controller/Component');
class QueryComponent extends AppComponent {
public function getAllQuery($modelName) {
$model = ClassRegistry::init($modelName);
$dbo = $model->getDatasource();
$logData = $dbo->getLog();
foreach ($logData['log'] as $key => $data) {
$querys[$key]['query'] = $data['query'];
}
$this->log('Get ALL query of Model:'.$modelName,LOG_DEBUG);
$this->log($querys,LOG_DEBUG);
}
public function getLastQuery($modelName) {
$model = ClassRegistry::init($modelName);
$dbo = $model->getDatasource();
$logData = $dbo->getLog();
$getLog = end($logData['log']);
$this->log('Get last query of Model:'.$modelName,LOG_DEBUG);
$this->log($getLog['query'],LOG_DEBUG);
}
}