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

Man*_*ngh 1 php laravel laravel-4 laravel-routing

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

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

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

有人可以帮帮我吗?

Mar*_*łek 7

我会按以下方式做到:

将允许的国家/地区列表放入配置文件(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
     });
Run Code Online (Sandbox Code Playgroud)

database.php您定义连接的位置,您可以添加其他连接,例如:

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

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

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

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

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

它应该工作,但我还没有测试过