2016-11-04 2 views
0

yii-db-query에서 db 연결을 설정하는 방법은 무엇입니까?Yii 2 - DB에서 연결을 설정하는 방법 다중 데이터베이스 쿼리

은 내가 3 데이터베이스 연결 있습니다

dB, DB2와 DB3을

나는이 기본 쿼리 사용

:

$query = (new \yii\db\Query()) 
      ->select('*') 
      ->from('trans_journal') 
      ->all(); 

그것은 것 수익을 ~오류. trans_journalDB2 연결에서 때문에 trans_journal는를 찾을 수 없습니다 된다.

그리고 나는이 쿼리을 사용했을 때

$query = (new \yii\db\Query()) 
      ->select('*') 
      ->from('trans_journal') 
      ->all(\Yii::$app->db2); 

쿼리가 성공적으로 생성하지만 문제는 그것이 배열을 반환 할 것이다 될 것이다.

다른 해결 방법이 있습니까?

답변

1

당신은 액티브 레코드 모델을 사용하는 경우, 모델에 제대로 각 모델에 대한 getDB 기능을 다시 정의 할 수 있습니다 :

// Model1 

    public function getDb() { 
     return Yii::$app->db1; 
    } 

    //Model 2 
    public function getDb() { 
     return Yii::$app->db2; 
    } 

당신이 명령을 사용하는 경우 그냥 createCommand 호출에 사용되는 DB를 설정할 수 있습니다

// To get from db1 
Yii::$app->db1->createCommand(
      (new \yii\db\Query)->select('col1, col2, ... ')-> 
          from('your_table_db1'))->queryAll(); 

// To get from db2 
Yii::$app->db2->createCommand(
      (new \yii\db\Query)->select('col1, col2, ... ')-> 
          from('your_table_db2))->queryAll(); 

all() 메서드는 쿼리를 실행하고 모든 결과를 배열로 반환합니다.

$results = Yii::$app->db1->createCommand(
      (new \yii\db\Query)->select('col1, col2, ... ')-> 
          from('your_table_db1'))->queryAll(); 

foreach($results as $key => $value){ 
    echo $value->col1; 
    // or $value['col1]; 

} 
: 각 모델의 예를 얻을 수에 대한

당신은 결과를 반복 할 수 있습니다

관련 문제