有人知道在我的应用程序中使用2个不同数据库的最佳做法吗?
我需要将数据存储在两个位置不同的数据库中(主机,用户名,密码,一切都在改变)。
我打算像往常一样创建模型,并在构造中设置db主机,名称,传递等。
答案 0 :(得分:16)
我不确定您是否称之为“最佳”方式,但 方式,如教程中所述,是
在数据库文件中,您具有默认配置,其中一部分是:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "user";
$db['default']['password'] = "database";
$db['default']['database'] = "db1";
现在你可以创建另一个组,比如说我们称之为group1,我们希望它的所有内容都与默认数据库设置相同,但名称除外,所以你可以这样做
$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 :(得分:4)
我想在这里写一下我的解决方案,因为我使用的代码越来越少了我想:
在data.php中的我为ex:
设置了数据库组$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 :(得分:4)
我读了那个
$db['default']['pconnect'] = FALSE;
必须是假的才能使这些事情发挥作用。如果我错了,请纠正我。对于您使用的所有多个数据库,必须关闭它。我不知道这是否是一个很好的解决方案。
答案 3 :(得分:0)
试过这个,它有效:
$db['otherdb'] = array_merge($db['primarydb'], array(
'database' => 'otherdbname'
));