2015-11-03 76 views
2

我正在用CI 3構建一個Web應用程序,我必須針對特定需求使用2個不同的數據庫連接。我已經將配置加載到database.php文件,我當然可以使用內置的類連接到它們。Codeigniter 3與dbforge的多個數據庫連接

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => 'root', 
    'password' => 'root', 
    'database' => 'primary', 
    'dbdriver' => 'mysqli' 
); 

$db['customer'] = array(
    'dsn' => '', 
    'hostname' => 'localhost', 
    'username' => 'root_1', 
    'password' => 'root_1', 
    'database' => 'secondary', 
    'dbdriver' => 'mysqli' 

); 

我使用的是從here的MY_Model。所以我擴展它們如下。

class Table extends MY_Model 
{ 


    public function __construct() 
    { 

     parent::__construct(); 

     $this->_database = $this->load->database('customer', TRUE); 
    } 

    public function create_table() 
    { 
    return $this->_database->query("CREATE TABLE MyGuests (
         id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
         firstname VARCHAR(30) NOT NULL, 
         lastname VARCHAR(30) NOT NULL, 
         email VARCHAR(50), 
         reg_date TIMESTAMP 
        )"); 

    } 

} 

但我需要使用dbForge來創建表。但是dbForge類只使用'default'連接。 Codeigniter dbForge文檔沒有提供加載到dbForge的不同db連接的方法。任何人都知道如何以優雅的方式解決這個問題?

+1

檢查此[鏈接](http://stackoverflow.com/questions/16500733/codeigniter-dbforge-create-database-and-tables)這是否對你有幫助? – Saty

+0

@Saty我已經通過鏈接,這看起來不像一個優雅的方式。特別是因爲我打算使用遷移和所有與「次要」連接。 – Fawzan

+0

你可以通過URL傳遞特定的參數,並根據URL連接到特定的數據庫 –

回答

0

經過一點研究,我找到了正確的方法來做到這一點。

$this->load->dbForge()實際上可以帶參數,如果我們傳遞一個數據庫對象,它將使用該連接來執行操作。

另外,我們可以傳遞第二個參數並獲得一個單獨的對象。

$this->dbForgeSecondary = $this->load->dbforge($this->_database, TRUE); 

簡單&很酷。