2015-11-03 75 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); 

简单&很酷。