有人知道在我的應用程序中使用兩個不同數據庫的最佳做法嗎?Codeigniter - 使用兩個不同數據庫的最佳方式
我需要將數據存儲在兩個位於不同位置的數據庫中(主機,用戶名,密碼都會更改)。
我打算創建模型像往常一樣,在結構設置數據庫主機,名稱,傳遞等
有人知道在我的應用程序中使用兩個不同數據庫的最佳做法嗎?Codeigniter - 使用兩個不同數據庫的最佳方式
我需要將數據存儲在兩個位於不同位置的數據庫中(主機,用戶名,密碼都會更改)。
我打算創建模型像往常一樣,在結構設置數據庫主機,名稱,傳遞等
我不知道,如果你把這個「最好」的方式,但一個方式,如在本教程中介紹,在數據庫文件此,
,你有默認的配置,其中一部分是:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "user";
$db['default']['password'] = "database";
$db['default']['database'] = "db1";
現在你可以創建另一個組,說我們稱它爲1組,我們希望它擁有的一切一樣,除了名稱的默認數據庫設置,所以你可以做
$db['group1']=$db['default'];
$db['group1']['database']="db2";
然後,當你想使用第二個數據庫,只是去
$DB2 = $this->load->database('group1', TRUE);
,然後,而不是$this->db->foo()
,你會做$DB2->foo()
或者(如在由sbaaaang意見建議),你可以做$this->db=$DB2;
把一切都相同
,你可以這樣
$DB1 = $this->load->database('group1', TRUE);
$DB2 = $this->load->database('group2', TRUE);
...
$DBn = $this->load->database('groupn', TRUE);
擴展,以多組嗯,我想只是寫在這裏我的解決辦法,因爲我已經使用了更少的代碼,我認爲:
在database.php中我設置數據庫組,以便爲前:
$database['default']['dbname'] = 'db1';
$database['second_db']['dbname'] = 'db2';
然後在模型中我使用的構造切換到數據庫中,我想用這樣的:
//use db1
function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database('default',true);
}
//use db2
function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database('second_db',true);
}
如果有人想展示更多的解決方案,請這麼做!這只是我的兩分錢。
有一個問題,當在控制器中加載2個模型時,第一個加載的設置數據庫也用於第二個加載的數據庫,並且如果第二個模型加載的__construct中有不同的db,那麼..如果任何人都可以幫助我解決這個問題我認爲我們真的是! – sbaaaang
,我讀了
$db['default']['pconnect'] = FALSE;
一定是假的這些東西的工作。如果我錯了,請糾正我。對於您使用的所有多個數據庫,它必須關閉。我不知道這是否是一個好的解決方案。
嘗試這樣做,它的工作原理:
$db['otherdb'] = array_merge($db['primarydb'], array(
'database' => 'otherdbname'
));
我認爲這是好的,那麼我可以將DB組在模型中使用的構建 – sbaaaang
$這個 - > DB = $這個 - >負載>數據庫( '組1',TRUE); – sbaaaang
這看起來沒問題。但是,沒有一種簡單的方法來改變數據庫名稱而不是整個配置。就像我們在覈心php中使用的那樣,'mysql_select_db(dbname)'。在我的情況下,我只需要更改數據庫名稱,我所有的數據庫都在同一臺服務器上。 – user3526