2013-06-19 24 views
5

私は3つのデータベースを持っています、すべてのデータベースは同じフィールドを持つ同じテーブルを持っていますが、私はYiiで同時に3つのデータベースのすべてのすべてのレコードを取得する方法を知らない。Yii複数のデータベース接続

助けてください

+0

使用エイリアステーブルを結合しています。 – Rikesh

+0

あなたはおそらく[シャーディング](http://www.codefutures.com/database-sharding/)を探しています。これは、YiiコアATMではサポートされていません。 –

+0

おかげでマイケルは、私が探している用語ですが、私はdbシャーディングが必要です –

答えて

10

1. DB接続の設定から始めます。保護/設定/ main.phpを開き、ガイドに記載されているように、一次接続を定義:

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

2.Thenはそれをコピーし、「DB2」に「DB」コンポーネントの名前を変更し、それに応じて接続文字列を変更します。また、あなたは次のようにクラス名を追加する必要があります。

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

3.Thenは「DB3」に「DB」コンポーネントの名前を変更し、それに応じて、接続文字列を変更し、それをコピーします。また、次のようにクラス名を追加する必要があります。

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

4.それはそれです。さて、あなたは、2つのデータベース接続を持っているし、次のようにDAOとクエリビルダでそれらを使用することができます。

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

ありがとうナンヒが、私が探しているものではない、私は一度に3つのデータベースすべてから結果を得る必要がある(1つのクエリ/行) 、同じ時刻 –

+0

あなた自身の関数の例を書くことができます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(); 戻り値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/

関連する問題