2013-06-19 13 views
5

Ho tre database, ogni database ha la stessa tabella con gli stessi campi, ma non so come ottenere tutti i record da tutti e tre i database nello stesso momento in Yii.Yii più connessioni al database

Aiutateci

+0

Usa alias mentre collegano due tabelle. – Rikesh

+0

Probabilmente stai cercando [sharding] (http://www.codefutures.com/database-sharding/) - che non è supportato nel core ATM Yii. –

+0

Grazie Michael, è un termine che sto cercando, ho bisogno di db sharding –

risposta

10

1.We inizierà con la configurazione delle connessioni DB. Aprire protetta/config/main.php e definire una connessione primaria come descritto nella guida:

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

2.Then copiarlo, rinominare la componente 'db' a 'db2' e cambiare la stringa di connessione di conseguenza. Inoltre, è necessario aggiungere il nome della classe come segue:

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

3.Then copiarlo, rinominare la componente 'db' a 'DB3' e cambiare la stringa di connessione di conseguenza. Inoltre, è necessario aggiungere il nome della classe come segue:

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

4. Che cos'è. Ora, si dispone di due connessioni al database e li può usare con DAO e generatore di query come segue:

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

Grazie Nanhe, ma non è quello che sto cercando, ho bisogno di ottenere risultati da tutti e tre i database contemporaneamente (una query/linea) , allo stesso tempo –

+0

Puoi scrivere il tuo esempio di funzione 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(); restituisce array_merge ($ db1Rows, $ db2Rows, $ db3Rows); –

6

Basta aggiungere nuova connessione al database di 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! 
    ), 

e ora è possibile connettersi a il database in questo modo:

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

controllo questo articolo per maggiori spiegare:

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

e questo:

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

Problemi correlati