2013-06-19 17 views
5

Üç veritabanım var, her veritabanı aynı tablolarla aynı tabloya sahip, ancak Yii'de aynı anda tüm üç veritabanından tüm kayıtları nasıl alacağımı bilmiyorum.Yii çoklu veritabanı bağlantıları

+0

Kullanım takma tabloları katılma işlemi. – Rikesh

+0

Muhtemelen Yii core ATM'de desteklenmeyen [sharding] (http://www.codefutures.com/database-sharding/) 'i arıyorsunuz. –

+0

Teşekkürler Michael, ben aradığım bir terim, ben db sharding –

cevap

10

1.We DB bağlantılarını sunucu ile başlayacaktır yardım edin. korumalı/config/Main.php açıp kılavuzunda açıklandığı gibi birincil bir bağlantı tanımlayın:

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

2.Then kopyalamak, 'db2' için 'db' bileşeni adlandırmak ve buna göre bağlantı dizesini değiştirin. Ayrıca, aşağıdaki gibi sınıf adını eklemeniz gerekir: 3.Then kopyalamak

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

, 'db3' ile 'db' bileşeni adlandırmak ve buna göre bağlantı dizesini değiştirin. Ayrıca, aşağıdaki gibi sınıf adını eklemeniz gerekir: bu

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

4.That olduğunu. Şimdi, iki veritabanı bağlantıları var ve DAO ve sorgu oluşturucu ile kullanabilirsiniz şöyle:

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

Teşekkürler Nanhe, ama aradığım şey değil, aynı anda tüm üç veritabanından sonuçları almak gerekir (bir sorgu/satır) , aynı zamanda –

+0

Kendi işlev örneğini yazabilirsiniz 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(); dönüş dizisi_merge ($ db1Rows, $ db2Rows, $ db3Rows); –

6

Sadece/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! 
    ), 

yapılandırma için yeni veritabanı bağlantı eklemek ve şimdi bağlanabilirsiniz Bu gibi veritabanı:

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

onay bu öğenin açıklamaya:

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

ve bu:

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