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

标签 yii

我的项目是基于 Multi-Tenancy 的。

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

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

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

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

在编写应用程序时,客户端的数量(以及数据库的数量)是未知的,因此不可能在引导脚本中包含所有连接。

现在,我想做的是,动态更改 Bootstrap 中的数据库连接,或者能够为登录的用户动态创建新连接。在 Yii 中是否有一个简单的解决方案并且仍然使用AR、查询生成器?

同样的问题在 yii 论坛上被问到,但仍然没有明确回答,.... 你可以在这里找到这个问题Yii dynamic dabatabase connection

最佳答案

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

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

关于Yii 根据用户动态数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684218/

相关文章:

yii - 无法将 yii 扩展添加到我的项目?

php - 使用sql检查特定时间的餐厅表可用性

yii - 如何在yii中查看角色

php - 在 php 中使用 posix_kill 时遇到问题

php - 在 Yii2 中使用 ActiveField 时设置输入字段的 ID 属性?

php - 如何使用 Yii 框架命令 DAO 对象联合所有命令

database - 如何在不影响 yii 的情况下更改数据库?

php - 无法读取 PHP YII1.1 中 6 个位置的 cron 表达式

php - Yii curl Couldn't resolve host 错误 CentOs 6

php - 使用 CDbMigration 将当前时间插入 MySQL 表