Configuration de la base de données

Aperçu des options de configuration de Nette Database.

Si vous n'utilisez pas tout le framework, mais seulement cette bibliothèque, lisez comment charger la configuration.

Connexion unique

Configuration d'une seule connexion à la base de données :

database:
	# DSN, la seule clé obligatoire
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Cela crée les services Nette\Database\Connection et Nette\Database\Explorer, qui sont généralement passés par autowiring ou en se référant à leur nom.

Autres réglages :

database:
	# afficher le panneau de la base de données dans la Tracy Bar ?
	debugger: ...     # (bool) activé par défaut si Tracy est actif

	# afficher l'EXPLAIN des requêtes dans la Tracy Bar ?
	explain: ...      # (bool) true par défaut

	# activer l'autowiring pour cette connexion ?
	autowired: ...    # (bool) true par défaut pour la première connexion

	# conventions de tables : discovered, static, ou nom de classe
	conventions: discovered  # (string) 'discovered' par défaut

	options:
		# ne se connecter à la base que lorsque c'est nécessaire ?
		lazy: ...     # (bool) false par défaut

		# classe du driver de base de données PHP
		driverClass:  # (string)

		# MySQL uniquement : définit sql_mode
		sqlmode:      # (string)

		# MySQL uniquement : définit SET NAMES
		charset:      # (string) 'utf8mb4' par défaut

		# MySQL uniquement : convertit TINYINT(1) en bool
		convertBoolean: # (bool) false par défaut

		# renvoie les colonnes de date comme objets immuables (depuis la version 3.2.1)
		newDateTime:  # (bool) false par défaut

		# Oracle et SQLite uniquement : format de stockage de la date
		formatDateTime: # (string) 'U' par défaut

La clé options peut contenir d'autres options décrites dans la documentation du driver PDO, par exemple :

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Connexions multiples

Dans la configuration, nous pouvons définir plusieurs connexions à des bases de données en les répartissant dans des sections nommées :

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

	another:
		dsn: 'sqlite::memory:'

L'autowiring n'est activé que pour les services de la première section. Cela peut être changé à l'aide d'autowired: false ou d'autowired: true.

Services DI

Ces services sont ajoutés au conteneur DI, où ### représente le nom de la connexion :

Nom Type Description
database.###.connection Nette\Database\Connection connexion à la base de données
database.###.explorer Nette\Database\Explorer Database Explorer

Si nous ne définissons qu'une seule connexion, les noms des services seront database.default.connection et database.default.explorer. Si nous définissons plusieurs connexions comme dans l'exemple ci-dessus, les noms correspondront aux sections, c'est-à-dire database.main.connection, database.main.explorer, ainsi que database.another.connection et database.another.explorer.

Nous passons les services non autowirés explicitement, en nous référant à leur nom :

services:
	- UserFacade(@database.another.connection)
version: 4.x