我的这个项目应根据当前用户使用不同的数据库。 我正在使用带有Datamapper扩展名的codeigniter。
理想的是在控制器中设置一个不同的连接组,我可以在我的datamapper模型中使用它,如:
var $db_params = 'user_specific';
然而,与配置参数不同,数据库参数似乎无法从控制器内部访问。 我确实找到了一种在回答this问题时创建新数据映射器对象时需要传递变量($ db)的方法。
$customers = new customer(NULL, $db);
// The NULL I would need becuase the constructor expects an ID or nothing by default
但是,大多数模型都会使用动态设置,因此在各地添加$ db变量需要做很多工作...... 有没有其他解决方案所以我可以做到
$customer = new customer();
// And in my model use the dynamic 'config' settings like
var $db_params = 'user_specific';
这将是一个很大的帮助。提前谢谢。
答案 0 :(得分:0)
<强>更新强>
当您已经检索了要连接的连接组时,更简单的方法是连接到数据库。在您的控制器中使用:
class SomeController extends MY_Controller{
public function index(){
$connection_group = getCustomerConnectionGroup(); //example only
$this->load->database($connection_group);
}
}
虽然您无法在运行时更改连接组,但可以通过返回连接ID并将其存储到MY_Controller的类属性
来解决它。<?php
class MY_Controller extends CI_Controller{
protected $mydb;
public function __construct()
{
parent::__construct();
$this->connect_to('default');
}
public function connect_to($group)
{
$this->mydb = $this->load->database($group, true);
}
}
?>
现在,在普通的控制器中,您将使用以下
class SomeController extends MY_Controller{
public function index(){
$connection_group = getCustomerConnectionGroup(); //example only
$this->connect_to($connectionGroup);
}
}
请注意,通过这样做,您需要使用
$这 - &GT; mydb-&GT;方法();
整个申请。