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

Posted

技术标签:

【中文标题】Laravel - 更改特定 URL 的数据库连接?【英文标题】:Laravel - Change Database Connection for a specific URL? 【发布时间】:2014-11-11 12:17:43 【问题描述】:

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

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

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

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

我使用环境制作了类似的东西。

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

【讨论】:

能否简单介绍一下如何操作?对不起,我不知道如何使用环境。 一个代码示例可能很有用。【参考方案2】:

我会这样做:

将允许的国家列表放入配置文件 (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();

应该可以,但是我没有测试过

【讨论】:

以上是关于Laravel - 更改特定 URL 的数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 个人资料页面中的安全问题

Laravel 动态更改连接

Laravel更改数据库连接[重复]

在 Laravel 中动态更改数据库连接 [重复]

我如何将 url 路由到 laravel 中的特定控制器并锚定到特定控制器

laravel 将未定义的 url 路由到特定的控制器