2016-06-09 42 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() 

如果你在MOD中使用了一个活跃的记录模型埃尔您可以定义:

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

//或DB2

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

然后:

如果您在getDb设置DB1()方法,因此将DB1中获取等。

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

我已经有了所有的配置。我之前提供的sql是在db2上的声明模型上,而这个sql是从db连接上的另一个模型调用的。当我做print_r($ dataProvider)时,数据库名称不是来自db2的db连接。是因为我从db连接上的模型调用函数? – kasmawati