2013-06-19 145 views
5

我有一個三個數據庫,每個數據庫都有相同的字段表,但我不知道如何從Yii中的所有三個數據庫中同時獲取所有記錄。Yii多個數據庫連接

請幫忙

+0

使用別名。 – Rikesh

+0

您可能正在尋找[sharding](http://www.codefutures.com/database-sharding/) - 這在Yii核心ATM中不受支持。 –

+0

感謝邁克爾,這是一個術語,我正在尋找,我需要db分片 –

回答

10

1.我們將開始配置數據庫連接。打開受保護/配置/ main.php和作爲指南中所述定義一個主連接:

'db'=>array(
     'connectionString' => 'mysql:host=localhost;dbname=db1', 
     'emulatePrepare' => true, 
     'username' => 'root', 
     'password' => '', 
     'charset' => 'utf8', 
    ), 

2.然後將它複製,重命名「DB」組件「DB2」,並相應地改變它的連接字符串。此外,您還需要添加類名如下:

'db2'=>array(
    'class'=>'CDbConnection', 
    'connectionString' => 'mysql:host=localhost;dbname=db2', 
    'emulatePrepare' => true, 
    'username' => 'root', 
    'password' => '', 
    'charset' => 'utf8', 
), 

3.Then複製,重命名爲「DB」組件「DB3」,並相應地更改連接字符串。此外,您需要添加類名稱如下:

'db2'=>array(
    'class'=>'CDbConnection', 
    'connectionString' => 'mysql:host=localhost;dbname=db2', 
    'emulatePrepare' => true, 
    'username' => 'root', 
    'password' => '', 
    'charset' => 'utf8', 
), 

4.就是這樣。現在,你有兩個數據庫連接,可與DAO和查詢生成器使用它們如下:

$db1Rows = Yii::app()->db->createCommand($sql)->queryAll(); 
$db2Rows = Yii::app()->db2->createCommand($sql)->queryAll(); 
$db3Rows = Yii::app()->db2->createCommand($sql)->queryAll(); 
+0

感謝Nanhe,但它不是我正在尋找的,我需要一次從三個數據庫中獲取結果(一個查詢/行) ,同一時間 –

+0

您可以編寫自己的函數示例getAllData(){0} {0} {0} {0}; $ sql =「SELECT * FROM table_name」; $ db1Rows = Yii :: app() - > db-> createCommand($ sql) - > queryAll(); $ db2Rows = Yii :: app() - > db2-> createCommand($ sql) - > queryAll(); $ db3Rows = Yii :: app() - > db2-> createCommand($ sql) - > queryAll(); return array_merge($ db1Rows,$ db2Rows,$ db3Rows); –

6

只需添加新的數據庫連接到config/main.php

'db1'=>array(
     'connectionString' => 'mysql:host=localhost;dbname=database1', 
     'emulatePrepare' => true, 
     'username' => 'root', 
     'password' => '', 
     'charset' => 'utf8', 
    ), 

    'db2'=>array(
     'connectionString' => 'mysql:host=localhost;dbname=database2', 
     'username' => 'root', 
     'password' => '', 
     'class'=>'CDbConnection',   // DO NOT FORGET THIS! 
    ), 

,現在你可以連接到你的數據庫是這樣的:

Yii::app()->db1 ... 
Yii::app()->db2 ... 

檢查這篇文章,更解釋:

http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/

和這樣的:當連接表

http://www.yiiframework.com/wiki/78/multiple-databases-and-multiple-domains/