2013-06-19 18 views
5

Mam trzy bazy danych, każda baza danych ma tę samą tabelę z tymi samymi polami, ale nie wiem, jak uzyskać wszystkie rekordy ze wszystkich trzech baz danych w tym samym czasie w Yii.Yii wiele połączeń z bazami danych

Proszę o pomoc

+0

Zastosowanie alias. – Rikesh

+0

Prawdopodobnie szukasz [sharding] (http://www.codefutures.com/database-sharding/) - które nie jest obsługiwane w rdzeniowym rdzeniu Yii. –

+0

Dzięki Michael, jest to termin, czego szukam, potrzebuję db sharding –

Odpowiedz

10

1. Rozpoczynamy od konfiguracji połączeń DB. Otwórz protected/config/main.php i zdefiniować podstawowy związek jak opisano w przewodniku:

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

2.Then go skopiować, zmienić nazwę „db” komponent do „db2” i zmienić ciąg połączenia odpowiednio. Ponadto, trzeba dodać nazwę klasy następująco:

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

3.Then go skopiować, zmienić nazwę „db” „komponent do DB3” i zmienić ciąg połączenia odpowiednio. Ponadto musisz dodać nazwę klasy w następujący sposób:

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

4. To wszystko. Teraz masz dwa połączenia z bazą danych i można z nich korzystać z DAO oraz kreator zapytań następująco:

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

Dzięki Nanhe, ale nie to, czego szukam, potrzebuję uzyskać wyniki ze wszystkich trzech baz danych na raz (jedno zapytanie/wiersz) , w tym samym czasie –

+0

Możesz napisać własny przykład funkcji getAllData() { $ 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

Wystarczy dodać nowe połączenie do bazy danych 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! 
    ), 

a teraz można połączyć baza danych tak:

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

sprawdzić ten artykuł do bardziej wyjaśniając:

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

i tak: podczas łączenia tabel

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

Powiązane problemy