yii2 - Yii 2 - 如何在多数据库的数据库查询中设置连接

标签 yii2

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

我有一个 3 数据库连接:

db, db2 and 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);

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

还有其他方法可以解决这个问题吗?

最佳答案

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

  // Model1 

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

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

如果您正在使用命令,您可以在 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();

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

}

关于yii2 - Yii 2 - 如何在多数据库的数据库查询中设置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414564/

相关文章:

javascript - Yii2 中的 Route 和 Post 参数与 ajax

gridview - 连接 GridView 中的两个字段(一个具有匿名函数)

Yii2 规则仅适用于使用场景

php - 在 Yii 2 中格式化日期时间值

yii - "defined(' YII_DEBUG') 或"在 "defined(' YII_DEBUG') 或定义 ('YII_DEBUG' , false);"有什么用?

php - 过滤 gridview 后的 Yii2 导出

javascript - Yii2 - 如何在 activeform 中添加 onchange 事件

Yii2 @web 别名为空

php - yii2 当超链接不在 pjax 中时如何使用 pjax

file - Yii2 - 日志文件 (app.log) 以及如何访问它们?