2016-12-04 8 views
0

(Laravel Config::set Persist Through Requests?)Laravel Динамические базы данных

После получения ответа ниже, я попробовал его ...

'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, 
     ], 

    ], 

Однако при этом в папке database.php под конфиг я получаю следующее сообщение об ошибке ...

Fatal error: Class 'Auth' not found in F:\trapstats_v5\config\database.php on line 73.

есть еще один способ сделать динамические соединения с базой данных, основанные на пользователе, который будет сохранять беспересадочный ugh вместо того, чтобы делать config([database.connections.mysql_company.database' => Auth::user()->club->db_name]) каждый раз, когда я хочу получить доступ к динамическому соединению?

Этот вопрос похож на ответ Dynamic database connection in Laravel. И если я тоже получу этот ответ, я получаю такую ​​же ошибку, за исключением того, что на этот раз она называется Session вместо Auth.

ответ

0

В конфигурационных файлах делает

'database' => Auth::user()->club->db_name, 

опасно, потому что Auth, вероятно, не настроена на момент ваших конфигурационные файлы считываются с помощью Laravel, она нуждается в файлах конфигурация для многих других вещей, так что следует читать они кулаком. Что вы можете сделать, в, позволяет сказать ServiceProvider, или какой-либо другой вспомогательный класс является:

config('database.connections.mysql_company', ['database' => Auth::user()->club->db_name]); 
0

После этого еще некоторое чтение и происходит вокруг и задавать много вопросов, которые я придумал решение.

В результате я создал промежуточное программное обеспечение под названием Database, которое запускалось ПОСЛЕ каждого другого промежуточного программного обеспечения. Это позволило использовать все типичные сервисы Laravel (например, Auth :: user());

Database 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); } } А затем для группы маршрутов Поручаю это промежуточное программное обеспечение для него.

Смежные вопросы