Verbinden mehrerer Datenbanken mit Laravel
Um mehrere Datenbanken innerhalb eines Laravel-Systems zu verwalten, bietet Laravel durch seine Datenbankfassade eine vielseitige Lösung.
Verwenden von Datenbankverbindungen
Bei Verwendung mehrerer Datenbanken Verbindungen können Sie über die Verbindungsmethode auf der DB-Fassade auf jede Verbindung zugreifen. Der für die Verbindungsmethode bereitgestellte Name stimmt mit den in der Konfigurationsdatei config/database.php definierten Namen überein:
$users = DB::connection('foo')->select(...);
Definition von Verbindungen
Datenbankverbindungen können sein konfiguriert mit der .env-Datei oder der config/database.php-Datei:
Verwenden der .env Datei:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mysql_database DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_PGSQL=pgsql DB_HOST_PGSQL=127.0.0.1 DB_PORT_PGSQL=5432 DB_DATABASE_PGSQL=pgsql_database DB_USERNAME_PGSQL=root DB_PASSWORD_PGSQL=secret
Verwenden der Datei config/database.php:
'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), ], 'pgsql' => [ 'driver' => env('DB_CONNECTION_PGSQL'), 'host' => env('DB_HOST_PGSQL'), 'port' => env('DB_PORT_PGSQL'), 'database' => env('DB_DATABASE_PGSQL'), 'username' => env('DB_USERNAME_PGSQL'), 'password' => env('DB_PASSWORD_PGSQL'), ],
Schema und Migrationen
Um die Verbindung anzugeben, die für Schema und Migrationen verwendet werden soll, verwenden Sie die Funktion „connection()“ Methode:
Schema::connection('pgsql')->create('some_table', function ($table) { $table->increments('id'); });
Alternativ können Sie eine Verbindung an der Spitze der Klasse definieren:
protected $connection = 'pgsql';
Query Builder
Zu verwenden den Query Builder für eine bestimmte Verbindung:
$users = DB::connection('pgsql')->select(...);
Modell
In Laravel 5.0 und höher können Sie die Variable $connection in Ihrem Modell festlegen:
class ModelName extends Model { protected $connection = 'pgsql'; }
Eloquent
In Laravel 4.0 und niedriger können Sie das definieren $Verbindungsvariable in Ihrem Modell:
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Transaktionsmodus
Um Transaktionen über mehrere Datenbanken hinweg zu verwalten:
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
oder
DB::connection('mysql')->beginTransaction(); try { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->beginTransaction(); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); DB::connection('pgsql')->commit(); DB::connection('mysql')->commit(); } catch (\Exception $e) { DB::connection('mysql')->rollBack(); DB::connection('pgsql')->rollBack(); throw $e; }
Laufzeitverbindungsverwaltung
Sie können auch Stellen Sie zur Laufzeit Verbindungen mit der setConnection-Methode oder der on static-Methode her:
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('pgsql'); // non-static method $something = $someModel->find(1); $something = SomeModel::on('pgsql')->find(1); // static method return $something; } }
Vorsicht
Beim Herstellen von Beziehungen mit Tabellen über verschiedene Datenbanken hinweg ist Vorsicht geboten aufgrund möglicher Einschränkungen aufgrund der von Ihnen verwendeten Datenbank und Einstellungen.
Das obige ist der detaillierte Inhalt vonWie kann ich mehrere Datenbankverbindungen in Laravel verwalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!