2012-10-07 72 views
7

有人知道在我的應用程序中使用兩個不同數據庫的最佳做法嗎?Codeigniter - 使用兩個不同數據庫的最佳方式

我需要將數據存儲在兩個位於不同位置的數據庫中(主機,用戶名,密碼都會更改)。

我打算創建模型像往常一樣,在結構設置數據庫主機,名稱,傳遞等

回答

16

我不知道,如果你把這個「最好」的方式,但一個方式,如在本教程中介紹,在數據庫文件此,

,你有默認的配置,其中一部分是:

$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); 
+1

我認爲這是好的,那麼我可以將DB組在模型中使用的構建 – sbaaaang

+3

$這個 - > DB = $這個 - >負載>數據庫( '組1',TRUE); – sbaaaang

+1

這看起來沒問題。但是,沒有一種簡單的方法來改變數據庫名稱而不是整個配置。就像我們在覈心php中使用的那樣,'mysql_select_db(dbname)'。在我的情況下,我只需要更改數據庫名稱,我所有的數據庫都在同一臺服務器上。 – user3526

4

擴展,以多組嗯,我想只是寫在這裏我的解決辦法,因爲我已經使用了更少的代碼,我認爲:

在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

有一個問題,當在控制器中加載2個模型時,第一個加載的設置數據庫也用於第二個加載的數據庫,並且如果第二個模型加載的__construct中有不同的db,那麼..如果任何人都可以幫助我解決這個問題我認爲我們真的是! – sbaaaang

4

,我讀了

$db['default']['pconnect'] = FALSE; 

一定是假的這些東西的工作。如果我錯了,請糾正我。對於您使用的所有多個數據庫,它必須關閉。我不知道這是否是一個好的解決方案。

0

嘗試這樣做,它的工作原理:

$db['otherdb'] = array_merge($db['primarydb'], array(

    'database' => 'otherdbname' 

)); 
相關問題