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

Gem*_*cen 3 yii2

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

我有3 个数据库连接

db、db2 和 db3

当我使用这个默认查询时

$query = (new \yii\db\Query())
            ->select('*')
            ->from('trans_journal')
            ->all();
Run Code Online (Sandbox Code Playgroud)

它会返回一个 错误。该trans_journal没有发现,因为trans_journalDB2连接

当我使用这个查询时

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

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

有没有另一种方法来解决这个问题?

sca*_*dge 5

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

  // Model1 

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

  //Model 2
  public function getDb() {
      return Yii::$app->db2;
  }
Run Code Online (Sandbox Code Playgroud)

如果您正在使用命令,您可以在 createCommand 调用中设置正在使用的数据库

// 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();
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)