我的项目是基于 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/