2016-03-23 10 views
0

würde Ich mag so etwas tun, wenn ich ein Modell verwendenLaravel 5.2 Verwendung zwei verschiedene Datenbankverbindungen gleichzeitig (sqlsrv + mysql)

class DB extends Model { 

Protected $table = "mssql_table"; 
} 

DB::useConnection("mssql")->All(); 

Soweit Konfiguration geht i herausgefunden habe, dass ich hinzufügen es selbst in app/config/database.php

Und so tat ich es.

So, jetzt muss ich dies in meinem connetions:

'mssql' => [ 
    'driver' => 'sqlsrv', 
    'host' => env('DB_MSSQL_HOST', 'localhost'), 
    'port' => env('DB_MSSQL_PORT', '3306'), 
    'database' => env('DB_MSSQL_DATABASE', 'forge'), 
    'username' => env('DB_MSSQL_USERNAME', 'forge'), 
    'password' => env('DB_MSSQL_PASSWORD', ''), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
    'engine' => null, 
], 

und diese auf meine .env Datei

DB_MSSQL_HOST= 
DB_MSSQL_PORT= 
DB_MSSQL_DATABASE= 
DB_MSSQL_USERNAME= 
DB_MSSQL_PASSWORD= 

Aber was ist der nächste Schritt? Google hat mir nicht wirklich geholfen, in Laravel 4. * Sie könnten db :: connection(); aber es dosent scheint zu arbeiten mehr

Irgendwelche Ideen?

+0

eine Antwort eingereicht. Le das wissen, wenn es für Sie arbeitet. Achten Sie darauf, die Antwort zu akzeptieren und/oder die Antwort abzustimmen, wenn es für Sie hilfreich war. Andernfalls vermeiden Sie, dass Ihre Fragen in Zukunft beantwortet werden. –

Antwort

2

Zuerst müssen Sie zum Einrichten eines oder mehrere Datenbanken in der Config (unbedingt Werte ändern, ich habe gerade ziemlich kopiert und eingefügt):

'db1' => [ 
    'driver' => 'sqlsrv', 
    'host' => env('DB_MSSQL_HOST', 'localhost'), 
    'port' => env('DB_MSSQL_PORT', '3306'), 
    'database' => env('DB_MSSQL_DATABASE', 'forge'), 
    'username' => env('DB_MSSQL_USERNAME', 'forge'), 
    'password' => env('DB_MSSQL_PASSWORD', ''), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
    'engine' => null, 
], 

'db2' => [ 
    'driver' => 'sqlsrv', 
    'host' => env('DB_MSSQL_HOST', 'localhost'), 
    'port' => env('DB_MSSQL_PORT', '3306'), 
    'database' => env('DB_MSSQL_DATABASE', 'forge'), 
    'username' => env('DB_MSSQL_USERNAME', 'forge'), 
    'password' => env('DB_MSSQL_PASSWORD', ''), 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
    'engine' => null, 
], 

Dann natürlich, du gehst (Sie müssen Tabellen usw.) müssen einige Migrationsschema für die neu hinzugefügte Datenbank erstellen:

Schema::connection('db2')->create('table_name', function($table) 
{ 
    $table->increments('id'); 
    ... 
}); 

Jetzt in Ihrem Eloquent-Modell können Sie festlegen, welche Datenbank Sie verwenden möchten, etwa so:

1

Danke @ Mike Barwick, das einzige, was ich suchte war protected $connection = ""

Jetzt kann ich zwei Datenbanken abfragen einmal bei

+0

Hallo, ich bin neu in Laravel. Und ich habe einen Fall wie deins, bei dem ich Daten aus der sqlsrv-Datenbank abrufen muss, und die Hauptdatenbank, die ich verwende, ist mysql. Sollte ich Ihre 'Klasse ändern DB Modell {Protected $ table =" mssql_table ";}' in 'Klasse ModelName erweitert Eloquent {protected $ connection = 'db2';}' oder ich ein neues Modell? Und sollte ich Schema :: Verbindung machen? – hendraspt

+0

Ich habe eine neue Verbindung hergestellt, wie im OT gezeigt und hinzugefügt $ connection = "mssql"; in diesem bestimmten MODELL. Wenn Sie die Schema :: -Verbindung verwenden möchten, liegt es an Ihnen, wie Sie mit Ihrer DB-Struktur umgehen. –