Erstellen eines Datenbankverbindungsobjekts
Die Interaktion mit der Datenbank sollte über ein Datenbankverbindungsobjekt erfolgen. Es gibt mehrere Szenarien, die besondere Aufmerksamkeit erfordern:
1. In prozeduralem Code, also in *.module, *.inc oder Skriptdateien:
Die beste Methode, eine Instanz des Datenbankverbindungsobjekts zu erstellen, ist über den Service Container.
Beispiel:
$database = \Drupal::database(); // Oder $database = \Drupal::service('database');
Dies liefert ein Datenbankverbindungsobjekt, das standardmäßig für die Verbindung mit der Hauptdatenbank konfiguriert ist, wie in der Datenbankkonfiguration in der Datei settings.php definiert.
2. Aus historischen und technischen Gründen ist der Typ, den \Drupal::database() zurückgibt, \Drupal\Core\Database\Connection, weshalb er manchmal $connection genannt wird.
3. Im OOP-Code:
- In manchen Fällen ist das Datenbankverbindungsobjekt bereits als Mitglied der aktuellen Klasse verfügbar; zum Beispiel haben viele Plugins und Services $this->database (oder $this->connection) als Datenbankverbindungsobjekt als Member.
- Wenn möglich, verwenden Sie Dependency Injection (DI), um den Service @database oder $container->get('database') zu nutzen, um die Datenbankverbindung zu erhalten.
- Wenn dies nicht möglich ist (z. B. in einer statischen Klassenmethode), verwenden Sie \Drupal::database().
- Wenn Services noch nicht verfügbar sind, kann \Drupal\Core\Database\Database::getConnection() verwendet werden, um die Datenbankverbindung zu erhalten.
- In Unit-Tests steht kein geladenes Core oder eingebauter Container zur Verfügung. Unit-Tests sollten normalerweise nicht auf die Datenbank zugreifen. Ein Unit-Test, der die Datenbank benötigt, sollte in einen Kernel-Test umgewandelt werden.
- In Kernel- und Funktionstests steht $this->container->get('database') zur Verfügung. Einige Testautoren stellen möglicherweise fest, dass der Container, auf den die Testklasse verweist, während einer Anfrage in einem Funktionstest nicht mit dem aktuellen Container synchronisiert ist. In diesem Fall kann der Testautor $this->rebuildContainer() aufrufen und anschließend erneut $this->container->get('database') verwenden.
Verwendung einer anderen Datenbankverbindung
Wenn Ihre Webseite mehrere Datenbanken verwendet, können Sie eine Abfrage an eine andere Datenbank als die Standarddatenbank senden, indem Sie Database::getConnection() verwenden. Zum Beispiel:
$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');
Dies stellt eine Verbindung zur Datenbank her, die in settings.php folgendermaßen definiert ist:
$databases['other_database']['default']
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.