Yii动态数据库连接根据用户?

Gau*_*ish 8 yii

我的项目是基于多租户的.

我有多个客户(公司),每个客户有多个用户.

每个客户端都有自己的数据库,因此在用户身份验证期间,我会发现该用户的关联数据库的名称.

每个数据库的结构是相同的......只有数据不同.

这样我们就可以为不同的公司保留不同的数据库,而不会混淆数据库中的数据.

编写应用程序时,未知客户端数量(以及数据库数量),因此无法在引导脚本中包含所有连接.

现在,我想要做的是,动态地改变引导程序中的数据库连接,或者能够为登录的用户动态创建新连接.在Yii中是否有一个简单的解决方案,仍然使用AR,查询建设者?

同样的问题在yii论坛上被问到仍然没有回答清楚,....你可以在这里找到这个问题 Yii动态数据库连接

ceb*_*ebe 7

我和论坛上发布的qiang一样.您需要一个数据库连接列表和登录用户的属性Yii::app()->user,告诉您要使用哪个连接(我将其命名connectionId为我的示例).然后getDbConnection(),您可以使用ActiveRecord基类:

public function getDbConnection()
{
    if(self::$db!==null)
        return self::$db;
    else
    {
        // list of connections is an array of CDbConnection configurations indexed by connectionId
        $listOfConnections=/* to be loaded somehow */;
        // create DB connection based on your spec here:
        self::$db=new CDbConnection($listOfConnections[Yii::app()->user->connectionId]);
        self::$db->active=true;
        return self::$db;
    }
}
Run Code Online (Sandbox Code Playgroud)