2016-07-22 66 views
0

使用Codeigniter 3.0.6Codeigniter:使用數據庫存儲多個用戶的數據庫名

直到現在我一直在使用Codeigniter的標準設置。我有一個數據庫,所有連接都很好。我遇到的問題是我想添加一個'global_accounts'數據庫,根據當前登錄的用戶將從中選擇要加載的數據庫。

Global_Accounts 
-------------------------------------------------------- 
user    | coolUser     | user2 
pass    | coolPassword    | passy 
url    | coolestsite.mysite.com  | u2.mysite.com 
database_name | coolestsite_application_db | u2_application_db 

就我而言,應用程序數據/模式並不重要。我想要的(並且將要建立的,但是在這個問題的範圍之外)是當用戶註冊時,他們將填寫用戶,傳遞和url,並且db_name將被自動創建。然後該腳本將創建一個具有該名稱的新數據庫,爲用戶創建應用程序數據庫的空白副本。

所以現在,我們正在編碼這個硬編碼,所以我們可以假設它的工作完美。

我要的是裏面笨的database.php中的文件:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => 'coolsite_application_db' 
    ...etc 
); 

而不是硬編碼這個文件,我希望能夠做這樣的事情:

$db['global'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => 'global_accounts' 
    ... 
); 

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => $this->db['global']->get_db_name($loggedInUserId); 
    ...etc 
); 

希望這使得意義 - 我需要根據登錄的用戶獲取數據庫名稱。顯然,我需要建立一個模型或只是一個函數來抓住它,但問題是在哪裏?我是否添加模型,連接到全局數據庫,然後在數據庫配置中加載模型?還有其他更簡單更高效的方式來做到這一點嗎? Codeigniter核心文件能夠從codeigniter配置文件中調用嗎?

回答

0

使用2個數據庫連接。 1爲全球用戶帳戶,1爲實際用戶數據庫。然後創建一個幫助函數來抓取用戶數據庫。只是一個想法。

+0

這就是我正在做的,但問題是,我想它會自動加載正確的用戶數據庫,具體取決於用戶/網址。將一個助手添加到database.php(使用get_instance())會導致無限遞歸。 –

+0

更改'$ db ['default'] ['autoinit'] = TRUE;'進入FALSE – reignsly

相關問題