Einmal 42 und zurück > Programmierung
Mehrere Datenbanken unter Symfony
In einem Projekt bestand die Notwendigkeit, die applikationsspezifische Datenbank (MariaDB) und eine externen Datenbank (MS-SQL) gleichzeitig zu verwenden. An der Datenbankstruktur war nichts zu drehen, da die MS-SQL Datenbank in anderen Projekten ebenfalls im Produktivbetrieb verwendet wurde. Somit bestand das Problem, zwei Datenbankverbindungen parallel offen zu halten und je nach Entity-Klasse die richtige Datenbank zu verwenden.
Wie man sich unter Linux mit einer MS-SQL Datenbank verbindet, habe ich bereits im Artikel MS-SQL mit Symfony unter Linux im Detail beschrieben. In diesem Artikel geht es vornehmlich um den gleichzeitigen Betrieb zweier Datenbank und die automatische Auswahl der korrekten Datenbankverbindung.
Zwei Datenbanken parallel betreiben
Hierfür habe ich zur einfacheren Übersicht in den Verzeichnissen src/Entity
und src/Repository
ein Unterverzeichnis MsSql
angelegt, in welche die Klassen der externen Datenbank gelegt werden. Dieser Schritt erhöht lediglich die Übersicht für menschliche Betrachter; Symfony/Doctrine ist das egal.
Somit ergeben sich die Verzeichnisse
Verzeichnis | Verwendung |
---|---|
src/Entity |
Entity-Klassen der MariaDB-Datenbank |
src/Entity/MsSql |
Entity-Klassen der MS-SQL-Datenbank |
src/Repository |
Repository-Klassen der MariaDB-Datenbank |
src/Repository/MsSql |
Repository-Klassen der MS-SQL-Datenbank |
Zudem habe ich in der Datei doctrine.yaml
zwei Verbindungen und zwei Entity-Manager definiert:
doctrine: dbal: default_connection: default connections: default: driver: pdo_mysql dbname: "%env(resolve:DATABASE_DB)%" user: "%env(resolve:DATABASE_USER)%" password: "%env(resolve:DATABASE_PASS)%" host: "%env(resolve:DATABASE_HOST)%" port: 3306 schema_filter: ~^(?!tt[a-z]{4}[0-9]{6})~ # Ignore Mssql tables mssql: # IMPORTANT: this configuration requires FreeTDS installed!