当我在模型中加载数据库时,如何在Codeigniter Profiler中显示数据库查询?

T. *_*nes 5 profiler profiling codeigniter

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

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

$this->Companies_db = $this->load->database( 'companies', TRUE, TRUE );
Run Code Online (Sandbox Code Playgroud)

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

该数据库查询被编译的方法_compile_queries()system/libraries/Profiler.php.当我的数据库加载到模型中时,它们的对象不会加载到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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

Zom*_*aya 8

我会得到一个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;  
     }
}
Run Code Online (Sandbox Code Playgroud)