Datenbankkonfiguration
Übersicht der Konfigurationsoptionen für Nette Database.
Wenn Sie nicht das gesamte Framework, sondern nur diese Bibliothek verwenden, lesen Sie, wie man die Konfiguration lädt.
Einzelne Verbindung
Konfiguration einer einzelnen Datenbankverbindung:
database:
# DSN, der einzige Pflichtschlüssel
dsn: "sqlite:%appDir%/Model/demo.db"
user: ...
password: ...
Dadurch entstehen die Services Nette\Database\Connection und Nette\Database\Explorer, die
üblicherweise per Autowiring oder über einen Verweis auf ihren Namen übergeben werden.
Weitere Einstellungen:
database:
# das Datenbank-Panel in der Tracy Bar anzeigen?
debugger: ... # (bool) standardmäßig an, wenn Tracy aktiv ist
# EXPLAIN der Queries in der Tracy Bar anzeigen?
explain: ... # (bool) Standardwert ist true
# Autowiring für diese Verbindung aktivieren?
autowired: ... # (bool) Standardwert ist true für die erste Verbindung
# Tabellenkonventionen: discovered, static oder ein Klassenname
conventions: discovered # (string) Standardwert ist 'discovered'
options:
# erst dann mit der Datenbank verbinden, wenn es nötig ist?
lazy: ... # (bool) Standardwert ist false
# PHP-Klasse des Datenbanktreibers
driverClass: # (string)
# nur MySQL: setzt sql_mode
sqlmode: # (string)
# nur MySQL: setzt SET NAMES
charset: # (string) Standardwert ist 'utf8mb4'
# nur MySQL: wandelt TINYINT(1) in bool um
convertBoolean: # (bool) Standardwert ist false
# gibt Datumsspalten als unveränderliche Objekte zurück (seit Version 3.2.1)
newDateTime: # (bool) Standardwert ist false
# nur Oracle und SQLite: Format zum Speichern des Datums
formatDateTime: # (string) Standardwert ist 'U'
Der Schlüssel options kann weitere Optionen enthalten, die Sie in der Dokumentation der PDO-Treiber finden, zum Beispiel:
database:
options:
PDO::MYSQL_ATTR_COMPRESS: true
Mehrere Verbindungen
In der Konfiguration können wir mehrere Datenbankverbindungen definieren, indem wir sie in benannte Abschnitte aufteilen:
database:
main:
dsn: 'mysql:host=127.0.0.1;dbname=test'
user: root
password: password
another:
dsn: 'sqlite::memory:'
Das Autowiring ist nur für die Services aus dem ersten Abschnitt aktiviert. Das lässt sich mit autowired: false
oder autowired: true ändern.
DI-Services
Diese Services werden dem DI-Container hinzugefügt, wobei ### für den Namen der Verbindung steht:
| Name | Typ | Beschreibung |
|---|---|---|
database.###.connection |
Nette\Database\Connection | Datenbankverbindung |
database.###.explorer |
Nette\Database\Explorer | Database Explorer |
Wenn wir nur eine Verbindung definieren, lauten die Namen der Services database.default.connection und
database.default.explorer. Definieren wir wie im obigen Beispiel mehrere Verbindungen, entsprechen die Namen den
Abschnitten, also database.main.connection, database.main.explorer sowie
database.another.connection und database.another.explorer.
Nicht autowirete Services übergeben wir explizit über einen Verweis auf ihren Namen:
services:
- UserFacade(@database.another.connection)