根据当前用户动态设置数据库

时间:2013-05-22 09:29:53

标签: php codeigniter-2 codeigniter-datamapper

我的这个项目应根据当前用户使用不同的数据库。 我正在使用带有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';

这将是一个很大的帮助。提前谢谢。

1 个答案:

答案 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;方法();

整个申请。