我已经安装了Laravel-4和jensegers/Laravel-MongoDB,它与Laravel具有相同的Eloquent模型接口,所以一切都很透明,1个数据库连接正常。
我想做的是根据用户请求切换到另一个数据库(将其视为决定去哪里获取数据的API)。
这就是我所做的:
App::before(function($request)
{
$dbPrefix = $request->segment(1);
if (!is_null($dbPrefix)) {
$dbName = strtolower($dbPrefix);
$newDb = DB::connection('mongodb_'.$dbName);
}
});
从这里。。我不知道该怎么办。它是这样连接到新数据库的吗?当我在模型中引用DB常量时,我如何告诉我的Laravel使用$newDb?
但我希望它在应用程序启动之前发生,所以在模型中指定"$connection"变量或使用对其他数据库的显式调用(如DB::connection('mongdb2')->query(…))对我没有好处
感谢
解决方案是:
/app/filters.php:
App::before(function($request)
{
$dbPrefix = $request->segment(1);
if (!is_null($dbPrefix)) {
$connectionName = 'mongodb_'.strtolower($dbPrefix);
Config::set('database.default', $connectionName);
}
});
/config/database.php:
'mongodb_soccer' => array(
'driver' => 'mongodb',
'host' => 'localhost',
'port' => 27017,
'username' => 'user',
'password' => 'password',
'database' => 'SoccerData'
),
'mongodb_tennis' => array(
'driver' => 'mongodb',
'host' => 'localhost',
'port' => 27017,
'username' => 'user',
'password' => 'password',
'database' => 'TennisData'
)
请求:
网站.com/soccer将获得mongodb_soccer 连接
site.com/tennis将获得mongodb_tennis 的连接
您可以在存储用户的默认"admin"数据库中对其进行预授权,然后根据用户请求切换到任何数据库连接以获取实际数据。
API开发需要这种方式。
祝好运