Yii2 Yi2 mongodb:如何更改数据库?

Yii2 Yi2 mongodb:如何更改数据库?,yii2,Yii2,我的应用程序使用许多数据库,它们在相同的结构中,但数据在不同的数据库之间没有关系。我需要通过请求参数更改数据库。 在配置中只能设置dsn,但我想动态更改数据库。 我该怎么做。我得到了自己: $mongo = Yii::$app->get('mongodb'); $mongo->options['db'] = 'foo'; 最简单的解决方案是在配置中定义多个连接: 'components' => [ ... 'mongodb' => [

我的应用程序使用许多数据库,它们在相同的结构中,但数据在不同的数据库之间没有关系。我需要通过请求参数更改数据库。 在配置中只能设置dsn,但我想动态更改数据库。 我该怎么做。

我得到了自己:

$mongo = Yii::$app->get('mongodb');
$mongo->options['db'] = 'foo';

最简单的解决方案是在配置中定义多个连接:

'components' =>
[
    ...
    'mongodb' =>
    [
        'class'     => '\yii\mongodb\Connection',
        'dsn'       => 'mongodb://localhost:27017/database1',
    ],

    'othermongodb' =>
    [
        'class'     => '\yii\mongodb\Connection',
        'dsn'       => 'mongodb://localhost:27017/database2',
    ],
    ...
]
然后,您可以使用
Yii::$app->mongodb
Yii::$app->othermongodb
(如果愿意,也可以使用
get()
-方法)访问您的连接。这还允许您为来自不同数据库的ActiveRecord类指定正确的数据库:

class MyOtherDBMongo extends \yii\mongodb\ActiveRecord
{
   public static function getDb()
   {
       return \Yii::$app->get('othermongodb');
   }
}

我使用yii2mongodb扩展组件。在yii1.1中,我使用yiimongo扩展,可以使用Yii::app()->mongodb->setDB(foo);这样做。在Yii2中,我不知道怎么做。这只是第一次起作用。一旦执行第一个查询,它将实际打开到该特定数据库的连接,并且它将保持这种状态,除非您再次
close()
it并修改数据库。