2016-12-04 1 views
0

(Laravel Config::set Persist Through Requests?)Laravel dynamische Datenbank des

Nach der Antwort unten bekommen, versuchte ich es aus ...

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

    ], 

jedoch auf diese unter Config innerhalb des database.php Ordner tun erhalte ich folgende Fehler ...

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

gibt es eine andere Art und Weise dynamische Datenbank-Verbindungen zu tun, basierend auf dem Benutzer, die thro sparen ugh Anfragen statt config([database.connections.mysql_company.database' => Auth::user()->club->db_name]) jedes Mal, wenn ich auf die dynamische Verbindung zugreifen möchte? Diese Frage ist ähnlich der Antwort von Dynamic database connection in Laravel. Und wenn ich diese Antwort auch tue, bekomme ich die gleiche Art von Fehler, außer dass es Session statt Auth heißt.

Antwort

0

In Ihrer Konfigurationsdateien tun

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

gefährlich ist, weil Auth ist wahrscheinlich nicht Setup an der Stelle, die Konfigurationsdateien von Laravel gelesen werden, braucht es die Konfigurationsdateien viele andere Dinge, so sollte es lesen sie Faust. Was Sie tun können, können in sagen, ein Serviceprovider oder eine andere Hilfsklasse ist:

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

Nach etwas mehr Lesen zu tun und gehen herum und viele Fragen zu stellen, ich mit einer Lösung gekommen sind.

Was ich getan habe, war die Erstellung einer Middleware namens Datenbank, die nach jeder anderen Middleware ausgeführt wurde. Dies ermöglichte die Verwendung aller typischen Laravel-Dienste (wie Auth :: user());

Datenbank 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); } } Und dann für die Route Gruppe zuweisen ich diese Middleware zu.