1

autoload ファイルからデータベース ライブラリを削除することを考えていました。私はページ上のすべてをキャッシュしているので、毎回データベースに接続する必要はありません.とにかくCIをデータベースに接続すると速度が無駄になると考えました.

私の質問は次のとおりです。たとえば、$this->load->database()パラメーターなしで MY_Model にデータベースをロードすると (構成ファイルから取得されます)、コントローラーで使用するすべてのモデルに対して新しい接続が確立されますか?

それとも一度だけ読み込まれるヘルパーのようなものでしょうか?

4

4 に答える 4

7

一度だけロードされます。データベース クラスはそれを確実にします。

于 2013-07-02T07:40:30.780 に答える
2

いいえ、1 つのデータベースにのみ接続します。で指定したものdatabase.php

ただし、複数のデータベースに接続できます。database.php次のような2 つの接続があるとします。

/* FORUM */
$active_group = "forum";
$active_record = TRUE;

$db['forum']['hostname'] = "xxxxx";
$db['forum']['username'] = "xxxxx";
$db['forum']['password'] = "xxxxx";
$db['forum']['database'] = "xxxxx";
$db['forum']['dbdriver'] = "mysql";
$db['forum']['dbprefix'] = "";
$db['forum']['pconnect'] = TRUE;
$db['forum']['db_debug'] = TRUE;
$db['forum']['cache_on'] = FALSE;
$db['forum']['cachedir'] = "";
$db['forum']['char_set'] = "utf8";
$db['forum']['dbcollat'] = "utf8_general_ci";

/* TEST SITE */
$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "xxxxx";
$db['default']['username'] = "xxxxx";
$db['default']['password'] = "xxxxx";
$db['default']['database'] = "xxxxx";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci"; 

以下を使用して、このデータベースを呼び出すことができます。

$this->db_forum = $this->CI->load->database('forum', TRUE);

db1 のようなアクセス$this->db

そしてdb2のような$this->db_forum

詳細については、CI ドキュメントを参照してください: http://ellislab.com/codeigniter/user-guide/database/connecting.html

簡単な例を使用しました。

それが役に立てば幸い。

于 2013-07-02T07:44:45.803 に答える
1

モデルをロードすると、これを使用できます。

$this->load->model('my_model', NULL, TRUE);

3 番目の引数は、単独でデータベースに接続します。

を調べてこれを見つけましたsystem/core/Loader.php

また、同じファイル内でが実行され、既に設定されている場合は接続前に$this->load->database();返されるため、複数の接続について心配する必要はありません。FALSE$this->db

// Do we even need to load the database class?
if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db))
{
    return FALSE;
}
于 2013-07-02T07:49:58.150 に答える