私のCodeigniterシステムは複数のデータベースを使用しています。すべてのページにすべてのデータベースが必要なわけではないので、必要なモデルに各接続をロードしてから、各コントローラー内に必要なモデルをロードします。この方法でロードすると、プロファイラーはこれらのデータベースからのクエリを表示しません。
これは、モデルにデータベースをロードする方法です。
$this->Companies_db = $this->load->database( 'companies', TRUE, TRUE );
以前は、すべてのデータベースを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;
}
}
モデルにデータベースをロードするときに、CIプロファイラーにクエリを表示させるにはどうすればよいですか? または、より具体的には、データベースがモデルにロードされるときに、データベースオブジェクトをメインCIオブジェクトにロードするにはどうすればよいですか。