CakePHP跟踪消耗资源查询

CakePHP track consuming resources query

我需要跟踪在我的 CakePHP 2.5.2 应用程序中执行此查询的位置(由 DebugKit 报告):

SELECT COUNT(*) AS count FROM sometable WHERE status = 1

我找到了引用table的模型,也许其他地方也引用了。

除了查找模型或运行每个可能的PHP脚本之外,是否有更好的方法来查找此查询在我的 CakePHP 应用程序中的来源?

您可以扩展 Mysql class 并覆盖 logQuery() 以便它使用您选择的日志记录机制记录每个请求。

示例:

  1. 创建文件 /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");
        }
    }
    
  2. 通过修改您的 /app/Config/database.php:

    来指示 CakePHP 使用新的 class
    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 的 post Logging sql queries into file in CakePHP 2