Yii2 如何为2 db连接生成SqlDataProvider

Yii2 如何为2 db连接生成SqlDataProvider,yii2,yii2-basic-app,Yii2,Yii2 Basic App,我有一个2db连接,DB和db2。我想从db2连接中的表声明中获取所有数据。下面是我的sql,它不是从db2连接读取的。如何解决这个问题 $sql = "SELECT * FROM claim where provider_id = xx "; $sql_count = "SELECT COUNT FROM ( $sql ) AS count "; $totalCount = Yii::$app->db2->createCommand($sql_count)->querySca

我有一个2db连接,DB和db2。我想从db2连接中的表声明中获取所有数据。下面是我的sql,它不是从db2连接读取的。如何解决这个问题

$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;

首先,您需要按如下方式配置数据库:

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;
}
//或db2

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

若在getDb()方法中设置了db1,那个么将从db1中获取结果,依此类推

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

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