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