Configurazione del database

Panoramica delle opzioni di configurazione di Nette Database.

Se non usate tutto il framework, ma solo questa libreria, leggete come caricare la configurazione.

Connessione singola

Configurazione di una singola connessione al database:

database:
	# DSN, l'unica chiave obbligatoria
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Vengono creati i servizi Nette\Database\Connection e Nette\Database\Explorer, che di solito si passano tramite autowiring oppure facendo riferimento al loro nome.

Altre impostazioni:

database:
	# mostrare il pannello del database nella Tracy Bar?
	debugger: ...     # (bool) predefinito è attivo se Tracy è attiva

	# mostrare l'EXPLAIN della query nella Tracy Bar?
	explain: ...      # (bool) predefinito true

	# abilitare l'autowiring per questa connessione?
	autowired: ...    # (bool) predefinito true per la prima connessione

	# convenzioni delle tabelle: discovered, static oppure il nome di una classe
	conventions: discovered  # (string) predefinito 'discovered'

	options:
		# connettersi al database solo quando serve?
		lazy: ...     # (bool) predefinito false

		# classe del driver di database PHP
		driverClass:  # (string)

		# solo MySQL: imposta sql_mode
		sqlmode:      # (string)

		# solo MySQL: imposta SET NAMES
		charset:      # (string) predefinito 'utf8mb4'

		# solo MySQL: converte TINYINT(1) in bool
		convertBoolean: # (bool) predefinito false

		# restituisce le colonne di data come oggetti immutabili (dalla versione 3.2.1)
		newDateTime:  # (bool) predefinito false

		# solo Oracle e SQLite: formato per salvare la data
		formatDateTime: # (string) predefinito 'U'

La chiave options può contenere altre opzioni che trovate nella documentazione dei driver PDO, per esempio:

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Connessioni multiple

Nella configurazione possiamo definire più connessioni al database dividendole in sezioni con un nome:

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

	another:
		dsn: 'sqlite::memory:'

L'autowiring è attivo solo per i servizi della prima sezione. Lo si può cambiare con autowired: false oppure autowired: true.

Servizi DI

Al container DI vengono aggiunti questi servizi, dove ### rappresenta il nome della connessione:

Nome Tipo Descrizione
database.###.connection Nette\Database\Connection connessione al database
database.###.explorer Nette\Database\Explorer Database Explorer

Se definiamo una sola connessione, i nomi dei servizi saranno database.default.connection e database.default.explorer. Se definiamo più connessioni come nell'esempio sopra, i nomi corrisponderanno alle sezioni, cioè database.main.connection, database.main.explorer e poi database.another.connection e database.another.explorer.

I servizi non autowired si passano esplicitamente facendo riferimento al loro nome:

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