2017-07-18 5 views
0

Wir erstellen eine Multi-Tenant-Anwendung. Über die Admin-Oberfläche fügen wir bei Bedarf einen neuen Mandanten hinzu. Diese Anwendung muss mit 1 + n-Datenbank arbeiten.Mehrere Datenbanken in Laravel PHP

1 Haupt-DB mit ca. 5 Tabellen. n DBs für jeden von uns erstellten Mandanten. Die mandantenspezifische Datenbank kann sich insgesamt auf dem separaten Datenbankserver befinden.

Frage:

  1. Was ist der beste Weg, um dies zu erreichen?
  2. Wo speichern wir die DB-Verbindungsinformationen für jeden Mandanten?
  3. Irgendwann müssen wir Join-Abfragen für Tabellen in Mandanten- und Hauptdatenbank auslösen. Wie würde das funktionieren?

Vielen Dank im Voraus für das Lesen und jede mögliche Lösung bitte.

Antwort

0

Wir können die DB-Verbindung in config/database.php in Verbindungen Teil eingestellt:

'connections' => [ 
    //Our primary DB 
    'mysql' => [ 
     '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, 
    ], 
    //Secondary DB 
    'mysql2' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB2_DATABASE', 'secondary'), 
     'username' => env('DB2_USERNAME', 'forge'), 
     'password' => env('DB2_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
     'engine' => null, 
    ], 
], 

Und für Modell wir

class User2 extends Model 
{ 
    protected $connection = 'mysql2'; 
} 

hinzufügen Und in Migration können wir Verbindungsmethode verwenden.

Schema::connection('mysql2')->create('table') 

Und wenn Sie Eloquent ORM können wir setConnection('mysql2') auf sie aus. in

$user = new User2; 
$user->setConnection('mysql2'); 

diese Antwort auf dieser Basis question

+0

Danke für Ihre wertvollen Eingaben. Im Falle unserer Anwendung werden wir jedoch weiterhin mehrere Mandanten erstellen und für jeden Mandanten wird eine separate DB erstellt. Daher benötigen wir einen Mechanismus zum Speichern der DB-Verbindungsinformationen für jeden Mandanten. Irgendwelche Eingaben, wie man das erreicht? –

0

In meinem Fall ein gewohnter Multi-Tenant Speicher Kind db Konfigurationen in Hauptdatenbank Satz Kind db verwendet params in Middle Verwendung $ connection = 'Kind' benötigt Modelle verbinden ist nicht möglich, da verschiedene Server sein kann, aber großer Teil der Beziehungen ist die Arbeit propertly (nicht whereExists, withCount .. etc)

Hoffnung `s helfen