我正在开发一个扫描/抓取/监控某些网站的应用
该应用可在www.linkbook.co
现在,我将解释我想做的事情:
我有一个主数据库,用于存储网站,网站上的网址和每个网站的网址模式;网站知道他被分配到的Db,网址知道网站ID;
因为我有2 GB / DB限制,所以我需要辅助DB。
我从http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/读取所有内容以及Google可以找到的内容,并且没有一个完整的示例使用dinamicaly连接;
因此,每当我的应用程序扫描网站时,找到的每个网址都将插入主数据库中,也会插入已分配给该网址所属网站的数据库中。
随着时间的推移,来自主数据库的数据将被删除,但它仍可在辅助数据库中使用。
因此,只有HOT信息存储在主信息中,但它们仍保存在辅助数据库中
Yii的家伙给出了这个例子,但我需要一个参数,从1到N,N = 1->无限,以便切换到正确的数据库。
class MyActiveRecord extends CActiveRecord {
...
private static $dbadvert = null;
protected static function getAdvertDbConnection()
{
if (self::$dbadvert !== null)
return self::$dbadvert;
else
{
self::$dbadvert = Yii::app()->dbadvert;
if (self::$dbadvert instanceof CDbConnection)
{
self::$dbadvert->setActive(true);
return self::$dbadvert;
}
else
throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
}
}
...
$ dbadvert需要是dinamic,这是我的问题。
另外,来自辅助DB的表格并不完全相同,因为我不需要所有表格中的所有字段,而且一些表格也会被删除,所以我需要一个模型;
我可以写它的模型,这并不难,我只会删除一些字段;
这就是我现在所拥有的,只是插入,在特定的数据库中,db1 a.k.a. linkbookco1
$command = Yii::app()->db1->createCommand("INSERT INTO `url` (
`id` ,
`website_id` ,
`link` ,
`name` ,
`created` ,
`instance_scanner_id` ,
`status`
)
VALUES (
NULL , '".($model_url->website_id)."', '".($model_url->link)."', '".($model_url->name)."', '".($model_url->created)."', '".($model_url->instance_scanner_id)."', '".($model_url->status)."'
);
");
$command->query();
db1和它的params在配置文件中提到,正如yii开发人员所说;
答案 0 :(得分:1)
从您的示例中我可以猜测您在应用中配置了辅助数据库连接,如
'dbadvert' => array(
'class' => 'CDbConnection',
...
)
您需要获得数据库连接的地方:
self::$dbadvert = Yii::app()->dbadvert;
因此,要拥有多个数据库连接,您需要将它们添加到数据库配置
'dbadvert1' => array(
'class' => 'CDbConnection',
...
)
'dbadvert2' => array(
'class' => 'CDbConnection',
...
)
在您的代码中,您可以执行类似
的操作self::$dbadvert = Yii::app()->getComponent("dbadvert".Yii::app()->request->getQuery('dbid', ''));