Yii2 如何为2 db连接生成SqlDataProvider
我有一个2db连接,DB和db2。我想从db2连接中的表声明中获取所有数据。下面是我的sql,它不是从db2连接读取的。如何解决这个问题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
$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连接上从模型调用了函数吗?