我的项目基于多功能SaaS。
我有多个客户(公司),每个客户都有多个用户 - 他们都将使用相同的数据库布局。
每个客户端都有自己的数据库,因此在用户身份验证期间,我想构建一个主数据库,将用户与该用户的公司数据库相关联。
每个数据库的结构相同......只有数据不同。
这样我们就可以为不同的公司保留不同的数据库,而不会混淆数据库中的数据。
编写应用程序时,未知客户端数量(以及数据库数量),因此无法在引导脚本中包含所有连接。
现在,我想要做的是,动态地改变引导程序中的数据库连接,或者能够为登录的用户动态创建新连接。在Yii中是否有一个简单的解决方案,仍然使用AR,查询构建器?
我看到了这个解决方案,但没有为我工作http://www.yiiframework.com/forum/index.php?/topic/5385-dynamic-db-connection/
这就是我的配置文件今天看起来运行一个数据库的脚本的方式,我想调用一个主数据库来控制用户所属的数据库以及应用程序在Yii中使用的任何想法?
<? php
$language = 'en';
$currencyBaseCode = 'USD';
$theme = 'default';
$connectionString = 'mysql:host=localhost;port=3306;dbname=master';
$username = 'root';
$password = 'YOUR PASS';
$memcacheServers = array( // An empty array means memcache is not used.
array(
'host' => '127.0.0.1',
'port' => 11211, // This is the default memcached port.
'weight' => 100,
),
);
$adminEmail = 'EMAIL ADDRESS';
$installed = true; // Set to true by the installation process.
$maintenanceMode = false; // Set to true during upgrade process or other maintenance tasks.
$instanceConfig = array(); //Set any parameters you want to have merged into configuration array.
//@see CustomManagement
$instanceConfig['components']['request']['hostInfo'] = 'website url';
$instanceConfig['components']['request']['scriptUrl'] = '/app/index.php';
$urlManager = array (); // Set any parameters you want to customize url manager.
? >
答案 0 :(得分:0)
在配置文件中定义master数据库,并使用普通的AR类连接到它以检索凭据。然后,关闭连接。
然后extend the AR class, specifically the getDbConnection()
method。获取相关凭据,并将它们作为参数传递给新的CDbConnection对象。
获取凭据的初始DB请求将是一个巨大的性能阻力,因此您应该使用Redis或Memcached将它们存储在内存中。 Yii本身并不这样做。
有几种不同的方法:
对于Yii来说,这些都不容易,因为这并不是Yii的目的。