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

时间:2013-12-01 17:33:52

标签: php laravel laravel-4

我安装了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对我有好处。

由于

1 个答案:

答案 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开发。

祝你好运