【问题标题】:Switch connection before any request Laravel在任何请求 Laravel 之前切换连接
【发布时间】:2018-08-30 12:08:09
【问题描述】:

我倾向于在任何请求之前切换数据库连接,有什么建议吗?

我使用域路由组:

Route::group(['domain' => 'example.com'], function () {


    Route::get('/', function () {
        return view('welcome');
    });
    ... and other routes

});

但我想在任何路由组后按域打开数据库连接,并使用一个控制器来控制所有域,但有多个数据库。 知道该怎么做吗? 我知道我可以像这样在控制器中切换连接:

$connection = config('database.connections.mysql');
$conn = DB::connection($connection);
$model = $conn->table('models');
$models = $model->get();

例如。 但在对应用程序提出任何请求之前,我想要它。

【问题讨论】:

    标签: php mysql database laravel


    【解决方案1】:

    你必须有一个中间件来包装该组内的所有路由。在该中间件中,您可以根据需要在数据库之间切换。

    【讨论】:

      【解决方案2】:

      我认为 Laravel 中间件可以在这里发挥作用。请参阅此处的文档:https://laravel.com/docs/5.6/middleware

      中间件简介:

      中间件提供了一种方便的机制来过滤 HTTP 请求 输入您的应用程序。例如,Laravel 包含一个中间件 验证您的应用程序的用户是否已通过身份验证。如果 用户未通过身份验证,中间件会将用户重定向到 登录屏幕。但是,如果用户通过了身份验证,则 中间件将允许请求进一步进入 应用。

      当然,可以编写额外的中间件来执行各种 除了身份验证之外的任务。 CORS 中间件可能是 负责为所有离开的响应添加正确的标题 你的申请。日志中间件可能会记录所有传入的请求 到您的应用程序。

      您可以将查询同一个数据库的所有路由放在同一个中间件中,并相应地切换数据库。 之前的中间件将非常适合这种情况。

      中间件之前和之后:

      中间件是在请求之前还是之后运行取决于 中间件本身。例如,以下中间件将执行 应用程序处理请求之前的一些任务。

      【讨论】:

      • 你是对的,我知道中间件可能有一种方法,但我认为路由中可能有一种方法,所以用更多的代码来配置中间件,改变视图和数据库苍蝇,谢谢
      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      相关资源
      最近更新 更多