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)
Version: 4.x