Laravel Dynamic Database&#39

时间:2016-12-04 22:02:59

标签: database dynamic config laravel-5.3

Laravel Config::set Persist Through Requests?

得到以下答案后,我试了一下......

'default' => 'mysql_main',
    'connections' => [
        'mysql_main' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
        'mysql_company' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => Auth::user()->club->db_name,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

    ],

'default' => 'mysql_main', 'connections' => [ 'mysql_main' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], 'mysql_company' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => Auth::user()->club->db_name, 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], ],

但是,在config下的database.php文件夹中执行此操作时,我收到以下错误...

是否有其他方法可以根据用户进行动态数据库连接,每次我想访问动态连接时都会通过请求而不是Fatal error: Class 'Auth' not found in F:\trapstats_v5\config\database.php on line 73.进行保存?

这个问题类似于Dynamic database connection in Laravel的答案。如果我也这样做,我会得到同样的错误,除非这次被称为Session而不是Auth。

1 个答案:

答案 0 :(得分:0)

在做了一些阅读并四处走动并提出许多问题后,我想出了一个解决方案。

我最终做的是创建一个名为Database的中间件,在每个其他中间件完成后运行。这允许使用所有典型的Laravel服务(如Auth :: user());

数据库 class Database { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (!Auth::guest()) { config(['database.connections.club.database' => Auth::user()->club->db_name]); } return $next($request); } } 然后对于路由组,我将此中间件分配给它。