多个数据库连接和Yii 2.0

我有两个数据库,并且每个数据库都有相同的字段相同的表,但是如何在Yii 2.0中同时从两个数据库中的所有数据库中获取所有logging?

首先你需要像下面这样configuration你的数据库:

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 (PostgreSQL),... 'username' => 'db2username', 'password' => 'db2password', ], ], ]; 

那么你可以简单地:

 // To get from db1 Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll() // To get from db2 Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll() 

如果您正在使用活动logging模型,则可以在模型中定义:

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

然后:

如果在getDb()方法中设置了db1getDb()db1获取结果等等。

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

只是添加:我跟着提供的答案,但仍然有一个错误:“未知的组件ID:DB”

经过一些testing,这里是我发现:函数getDB只有在连接到数据库后才被调用。 因此,您不能在configuration文件中删除或重命名“db”。 相反,你需要让'db'的调用正常进行,然后覆盖它。

解决scheme(对我来说)如下:

config/web.php添加你的第二个数据库configuration如下db

 'db' => require(__DIR__ . '/db.php'), 'db2' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=name', 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', 'on afterOpen' => function ($event) { $event->sender->createCommand("SET time_zone = '+00:00'")->execute(); }, ], 

不要重命名db 。 未能find数据库将导致错误。 无论你喜欢什么,你都可以命名db2

现在在模型中添加下面的代码:

 class ModelNameHere extends \yii\db\ActiveRecord { // add the function below: public static function getDb() { return Yii::$app->get('db2'); // second database } 

这将会覆盖默认的dbconfiguration。

我希望能帮助别人。

注意:您可以将db2的configuration包含在另一个文件中,但不能将其包含在db.php文件中(很明显)。 相反,创build一个名为db2.php的文件,并在执行db调用它:

 'db' => require(__DIR__ . '/db.php'), 'db2' => require(__DIR__ . '/db2.php'), 

谢谢