2016-06-09 1 views
0

2 DB 연결, db 및 db2가 있습니다. 나는 db2 연결에서 테이블 클레임으로부터 모든 데이터를 얻고 싶다. 아래는 내 SQL이고 그것은 DB2 연결에서 읽지 않았다. 이 문제를 해결하는 방법?2 db 연결에 대해 SqlDataProvider를 생성하는 방법

$sql = "SELECT * FROM claim where provider_id = xx "; 
$sql_count = "SELECT COUNT FROM ($sql) AS count "; 
$totalCount = Yii::$app->db2->createCommand($sql_count)->queryScalar(); 
$dataProvider = new SqlDataProvider([ 
'sql' => $sql, 
'totalCount' => $totalCount, 
'sort' =>false, 
'pagination' => [ 
     'pageSize' => 10, 
    ], 
]); 
return $dataProvider; 

답변

0

먼저 아래처럼 데이터베이스를 구성해야합니다 그리고

return [ 
'components' => [ 
    'db1' => [ 
     'class' => 'yii\db\Connection', 
     'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,... 
     'username' => 'db1username', 
     'password' => 'db1password', 
    ], 
    'db2' => [ 
     'class' => 'yii\db\Connection', 
     'dsn' => 'mysql:host=localhost;dbname=db2name', //maybe other dbms such as psql,... 
     'username' => 'db2username', 
     'password' => 'db2password', 
    ], 
], 
]; 

간단히 할 수 있습니다

//to get from db1 
Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll() 

// DB2에서 얻을 수있는

Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll() 

하는 경우 당신은 귀하의 모드에서 활성 레코드 모델을 사용하고 있습니다 엘은 사용자가 정의 할 수 있습니다

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

// 또는

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

그런 다음 DB2 :

() 메서드 getDb에 DB1을 설정 한 경우

, 결과 등 DB1에서 인출 될 것입니다.

ModelName::find()->select('*')->all(); 
+0

이미 모든 구성이 있습니다. 내가 전에 제공하는 SQL은 DB2에 주장 모델에 있고이 SQL은 DB 연결에 다른 모델에서 호출되고있다. print_r ($ dataProvider)을 할 때 데이터베이스 이름은 db2가 아닌 db 연결입니다. DB 연결에서 모델로부터 함수를 호출했기 때문입니까? – kasmawati

관련 문제