Yii 2 - 如何在多个数据库的DB Query中设置连接

时间:2016-11-04 02:55:11

标签: yii2

如何在yii-db-query中设置数据库连接?

我有一个 3数据库连接

  

db,db2和db3

当我使用此默认查询

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

会返回 错误 trans_journal 未找到 ,因为 trans_journal 来自 db2连接

当我使用查询时:

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

查询将成功生成,但问题是返回数组

还有另一种解决方法吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是活动记录模型,则可以在模型中正确地重新定义每个模型的getDB函数:

  // Model1 

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

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

如果您正在使用命令,则可以在createCommand call

中设置正在使用的数据库
// 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];

}

答案 1 :(得分:1)

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

 $dataProvider = new ActiveDataProvider([
        'db' => Yii::$app->get('db2'),
        'query' => $query,
    ]);

$models = $dataProvider->getModels();
相关问题