2012-10-08 64 views
1

我正在開發一個應用程序,它可以掃描/檢索/在www.linkbook.coYii的PHP:讀/寫數據的動態數據庫連接

現在監控某些網站

的應用程序是免費的,我會解釋一下我想做:

我有一個主要的數據庫,存儲的網站,網站上發現的網址和url模式從每個網站;該網站知道他已分配到的Db,該網址知道網站ID;

因爲我有2 GB/DB的限制,我需要輔DB。

我全部從http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/以及谷歌能找到的東西中讀到,並且沒有一個使用dinamicaly連接的完整示例;

因此,每當我的應用程序掃描一個網站時,找到的每個網址都會被插入到主數據庫中,並且也會被分配到該網址所屬網站的數據庫中。

及時,主數據庫中的數據被刪除,但仍在輔助數據庫中可用。

所以,只有HOT信息被存儲在主,但他們仍然在二級分貝的

的Yii的傢伙保存舉這個例子,但我需要一個參數,從1到N,N = 1>無限,爲了切換到正確的DB。

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需要動態,這是我的問題。

此外,從輔助數據庫的表不完全相同,因爲我不需要所有表中的所有字段,並且一些表也會丟棄,所以我需要一個模型;

模型我可以寫它,這並不難,我只是刪除一些領域;

這是我現在,只是插入,在一個特定的DB,DB1又名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在配置文件中提到的那樣,警予開發商說;

+0

這可能會幫助你一點http://www.yiiframework.com/wiki/200/sub-domains-with-different-databases-in-yii/ – SuVeRa

+0

不是真的,他仍然有每個db連接1個文件。我不想那 –

回答

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', '')); 
+0

這就是我需要的,concat thingy:d –