0

我有这个项目,应该根据当前用户使用不同的数据库。我正在使用带有 Datamapper 扩展的 codeigniter。

理想的情况是在控制器中设置不同的连接组,我可以在我的数据映射器模型中使用,例如:

var $db_params = 'user_specific';

然而,与配置参数不同,数据库参数似乎无法从控制器内部访问。在回答这个问题时,我确实找到了一种在创建新数据映射器对象时需要传递变量 ($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';

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

4

1 回答 1

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);

    }

}

请注意,通过这样做,您需要使用

$this->mydb->method();

贯穿您的应用程序。

于 2013-05-22T09:48:44.087 回答