我的项目是基于多租户的.
我有多个客户(公司),每个客户有多个用户.
每个客户端都有自己的数据库,因此在用户身份验证期间,我会发现该用户的关联数据库的名称.
每个数据库的结构是相同的......只有数据不同.
这样我们就可以为不同的公司保留不同的数据库,而不会混淆数据库中的数据.
编写应用程序时,未知客户端数量(以及数据库数量),因此无法在引导脚本中包含所有连接.
现在,我想要做的是,动态地改变引导程序中的数据库连接,或者能够为登录的用户动态创建新连接.在Yii中是否有一个简单的解决方案,仍然使用AR,查询建设者?
同样的问题在yii论坛上被问到仍然没有回答清楚,....你可以在这里找到这个问题 Yii动态数据库连接
我和论坛上发布的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)