根据用户请求使用不同的数据库


Using different databases based on user request

我已经安装了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开发需要这种方式。

祝好运