【问题标题】:How can I display my database queries in the Codeigniter Profiler when I load my databases in my models?当我在模型中加载数据库时,如何在 Codeigniter Profiler 中显示我的数据库查询?
【发布时间】:2012-07-10 22:59:28
【问题描述】:

我的 Codeigniter 系统使用多个数据库。我不需要每个页面上的每个数据库,因此我将模型中的每个连接加载到需要的位置,然后在每个控制器中加载所需的模型。当我以这种方式加载内容时,分析器不会显示来自这些数据库的任何查询。

这是我在模型中加载数据库的方式:

$this->Companies_db = $this->load->database( 'companies', TRUE, TRUE );

我曾经在 MY_Controller() (核心控制器的扩展)中加载我的所有数据库。当我在那里加载它们时,分析器工作正常。当我将它们加载到我的模型中时,它不会显示任何数据库查询。

数据库查询正在system/libraries/Profiler.php 内的方法_compile_queries() 中编译。当我的数据库加载到模型中时,它们的对象没有加载到 CI 对象中。下面的代码是 _compile_queries() 方法的前几行代码,这就是发生这种情况的地方。

foreach (get_object_vars($this->CI) as $CI_object)
    {
        if (is_object($CI_object) && is_subclass_of(get_class($CI_object), 'CI_DB') )
        {
            $dbs[] = $CI_object;
        }
    }

当我在模型中加载数据库时,如何让 CI 分析器显示我的查询? 或者,更具体地说,我如何让我的数据库对象加载到主 CI 对象中数据库已加载到模型中。

【问题讨论】:

    标签: codeigniter profiling profiler


    【解决方案1】:

    我将获取 CI 对象的一个​​实例并将您的数据库存储在那里,以便探查器也可以使用它。

    class My_Model {
         private $Companies_db;
    
         public function __construct(){
               $this->Companies_db = $this->load->database( 'companies', TRUE, TRUE );
    
               // Pass reference of database to the CI-instance
               $CI =& get_instance();
               $CI->Companies_db =& $this->Companies_db;  
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多