Datenbankkonfiguration

Übersicht der Konfigurationsoptionen für Nette Database.

Wenn Sie nicht das gesamte Framework verwenden, sondern nur diese Bibliothek, lesen Sie, wie die Konfiguration geladen wird.

Einzelne Verbindung

Konfiguration einer einzelnen Datenbankverbindung:

database:
	# DSN, einziger Pflichtschlüssel
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Erstellt die Dienste Nette\Database\Connection und Nette\Database\Explorer, die wir normalerweise über Autowiring übergeben, oder durch Verweis auf ihren Namen.

Weitere Einstellungen:

database:
	# Datenbankpanel in der Tracy Bar anzeigen?
	debugger: ...     # (bool) Standard ist true

	# EXPLAIN von Abfragen in der Tracy Bar anzeigen?
	explain: ...      # (bool) Standard ist true

	# Autowiring für diese Verbindung zulassen?
	autowired: ...    # (bool) Standard ist true bei der ersten Verbindung

	# Tabellenkonventionen: discovered, static oder Klassenname
	conventions: discovered  # (string) Standard ist 'discovered'

	options:
		# Erst verbinden, wenn nötig?
		lazy: ...     # (bool) Standard ist false

		# PHP-Klasse des Datenbanktreibers
		driverClass:  # (string)

		# nur MySQL: setzt sql_mode
		sqlmode:      # (string)

		# nur MySQL: setzt SET NAMES
		charset:      # (string) Standard ist 'utf8mb4'

		# nur MySQL: konvertiert TINYINT(1) in bool
		convertBoolean:  # (bool) Standard ist false

		# gibt Datumsspalten als unveränderliche Objekte zurück (ab Version 3.2.1)
		newDateTime:  # (bool) Standard ist false

		# nur Oracle und SQLite: Format zum Speichern von Datum/Uhrzeit
		formatDateTime: # (string) Standard ist 'U'

Im Schlüssel options können weitere Optionen angegeben werden, die Sie in der Dokumentation der PDO-Treiber finden, wie zum Beispiel:

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Mehrere Verbindungen

In der Konfiguration können wir auch mehrere Datenbankverbindungen definieren, indem wir sie in benannte Abschnitte unterteilen:

database:
	main:
		dsn: 'mysql:host=127.0.0.1;dbname=test'
		user: root
		password: password

	another:
		dsn: 'sqlite::memory:'

Autowiring ist nur für Dienste aus dem ersten Abschnitt aktiviert. Dies kann mit autowired: false oder autowired: true geändert werden.

DI-Dienste

Diese Dienste werden dem DI-Container hinzugefügt, wobei ### den Namen der Verbindung darstellt:

Name Typ Beschreibung
database.###.connection Nette\Database\Connection Verbindung zur Datenbank
database.###.explorer Nette\Database\Explorer Database Explorer

Wenn wir nur eine Verbindung definieren, lauten die Dienstnamen database.default.connection und database.default.explorer. Wenn wir mehrere Verbindungen wie im obigen Beispiel definieren, entsprechen die Namen den Abschnitten, d.h. database.main.connection, database.main.explorer und weiter database.another.connection und database.another.explorer.

Nicht automatisch verdrahtete Dienste übergeben wir explizit durch Verweis auf ihren Namen:

services:
	- UserFacade(@database.another.connection)
Version: 4.0