Laravel - 更改特定URL的数据库连接?

时间:2014-09-17 12:45:16

标签: php laravel laravel-4 laravel-routing

我使用laravel框架相当新。我有以下要求。我有一个域 - example.com,它的整个代码堆在laravel中运行。让我们说配置默认数据库连接是 - 'db1'

现在,如果网址变为 - example.com/country - 我希望默认数据库连接成为 - 'db2'

我还想将基本URL更改为example.com/country,因为所有模块都是相同的。这里只会改变数据库连接。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

我会按以下方式进行:

将允许的国家/地区列表放入配置文件(countries.php)。

routes.php

// choosing country
$country = '';

if (in_array(Request::segment(1), Config::get('countries'))) {

    $country = Request::segment(1);
}

// making route for top level 
if ($country != '') {
    Route::any( '/', 'MainPage@index');
}

// making routes optionally prefixed by country 
Route::group(
    array('prefix' => $country,
    function () {
       // here all routes
     });

在已定义连接的database.php中,您可以添加其他连接,例如:

'germany' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'germany_connection',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

现在在同一个文件中(尽管你应该把它移到其他地方),你可以这样做:

if ($country == 'germany') {
    DB::disconnect();
    Config::set('database.default','germany');
    DB::reconnect();
}

您当然可以在此处添加许多条件,或者如果您已为每个允许的国家/地区定义了连接,则可以执行以下操作:

if ($country != '' ) {
    DB::disconnect();
    Config::set('database.default', $country);
    DB::reconnect();
}

它应该可行,但我还没有测试过它

答案 1 :(得分:1)

我使用环境做了类似的事情。

在检测环境时添加新规则以解析URL并将其更改为新环境。然后,您可以为设置新数据库,基本URL等的新环境添加目录。