我需要跟踪我的CakePHP 2.5.2应用程序执行此查询的位置(由DebugKit报告):
SELECT COUNT(*) AS count FROM sometable WHERE status = 1
我找到了一个引用表的模型,也许它在其他地方被引用。
除了寻找模型或运行每个可能的PHP脚本以查找我的CakePHP应用程序中的查询来源之外,还有更好的方法吗?
答案 0 :(得分:1)
您可以扩展Mysql
类并覆盖logQuery()
,以便使用您选择的日志记录机制记录每个请求。
示例:
创建文件/app/Model/Datasource/MysqlLog.php
并添加以下内容:
App::uses('Mysql', 'Model/Datasource/Database');
class MysqlLog extends Mysql {
function logQuery($sql, $params = []) {
parent::logQuery($sql);
Debugger::log("sql[{$this->_queriesCnt}]: $sql");
}
}
通过修改/app/Config/database.php
:
public $default = array(
'datasource' => 'Database/MysqlLog',
'persistent' => true,
'host' => 'localhost',
'login' => 'my_login',
'password' => 'my_pass',
'database' => 'my_db',
);
请求将记录到/app/tmp/logs/debug.log
。
基于Vladimir Bilyov的帖子Logging sql queries into file in CakePHP 2。