我安装了Laravel-4和jenssegers / Laravel-MongoDB,它与Eloquent模型的接口与Laravel相同,所以一切都非常透明,1个数据库连接正常。
我正在尝试做的是,根据用户请求切换到另一个数据库(将其视为决定去哪里并获取数据的API)。
这就是我所做的:
App::before(function($request)
{
$dbPrefix = $request->segment(1);
if (!is_null($dbPrefix)) {
$dbName = strtolower($dbPrefix);
$newDb = DB::connection('mongodb_'.$dbName);
}
});
从这里开始..我不知道该怎么做..这种方式是否与新数据库连接?当我在模型中引用数据库常量时,如何告诉我的Laravel使用$ newDb?
但我希望它在应用程序启动之前发生,因此在模型中指定“$ connection”变量或使用对其他数据库的显式调用,如DB :: connection('mongodb2') - > query(...)为no对我有好处。
由于
答案 0 :(得分:0)
解决方法是:
/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'
)
请求:
site.com/soccer 将获得连接mongodb_soccer
site.com/tennis 将得到连接mongodb_tennis
您可以在存储用户的默认“admin”数据库中对其进行预授权,然后根据用户请求切换到任何数据库连接以获取实际数据。
我需要这种方式进行API开发。
祝你好运