Nette Documentation Preview

syntax
Konfiguracja bazy danych
************************

.[perex]
Przegląd opcji konfiguracyjnych dla Nette Database.

Jeśli nie używasz całego frameworku, tylko tej biblioteki, przeczytaj, [jak wczytać konfigurację|bootstrap:].


Jedno połączenie
----------------

Konfiguracja jednego połączenia z bazą danych:

```neon
database:
	# DSN, jedyny obowiązkowy klucz
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...
```

Utworzy to usługi `Nette\Database\Connection` i `Nette\Database\Explorer`, które przekazujemy zwykle przez [autowiring |dependency-injection:autowiring] albo odwołując się do [ich nazwy |#Usługi DI].

Pozostałe ustawienia:

```neon
database:
	# pokazać panel bazy danych w Tracy Bar?
	debugger: ...     # (bool) domyślnie włączone, jeśli Tracy jest aktywne

	# pokazać EXPLAIN zapytań w Tracy Bar?
	explain: ...      # (bool) domyślnie true

	# włączyć autowiring dla tego połączenia?
	autowired: ...    # (bool) domyślnie true dla pierwszego połączenia

	# konwencje tabel: discovered, static albo nazwa klasy
	conventions: discovered  # (string) domyślnie 'discovered'

	options:
		# łączyć się z bazą danych dopiero wtedy, gdy jest potrzebna?
		lazy: ...     # (bool) domyślnie false

		# klasa sterownika bazy danych w PHP
		driverClass:  # (string)

		# tylko MySQL: ustawia sql_mode
		sqlmode:      # (string)

		# tylko MySQL: ustawia SET NAMES
		charset:      # (string) domyślnie 'utf8mb4'

		# tylko MySQL: konwertuje TINYINT(1) na bool
		convertBoolean: # (bool) domyślnie false

		# zwraca kolumny dat jako obiekty niezmienne (od wersji 3.2.1)
		newDateTime:  # (bool) domyślnie false

		# tylko Oracle i SQLite: format zapisu daty
		formatDateTime: # (string) domyślnie 'U'
```

Klucz `options` może zawierać także inne opcje, które znajdziesz w [dokumentacji sterowników PDO |https://www.php.net/manual/en/pdo.drivers.php], na przykład:

```neon
database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true
```


Wiele połączeń
--------------

W konfiguracji możemy zdefiniować wiele połączeń z bazą danych, dzieląc je na nazwane sekcje:

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

	another:
		dsn: 'sqlite::memory:'
```

Autowiring jest włączony tylko dla usług z pierwszej sekcji. Można to zmienić za pomocą `autowired: false` albo `autowired: true`.


Usługi DI
---------

Do kontenera DI dodawane są te usługi, gdzie `###` oznacza nazwę połączenia:

| Nazwa                     | Typ                             | Opis
|---------------------------|---------------------------------|---------------------------
| `database.###.connection` | [api:Nette\Database\Connection] | połączenie z bazą danych
| `database.###.explorer`   | [api:Nette\Database\Explorer]   | [Database Explorer |explorer]


Jeśli zdefiniujemy tylko jedno połączenie, nazwy usług będą brzmieć `database.default.connection` i `database.default.explorer`. Jeśli zdefiniujemy wiele połączeń jak w powyższym przykładzie, nazwy będą odpowiadać sekcjom, czyli `database.main.connection`, `database.main.explorer`, a także `database.another.connection` i `database.another.explorer`.

Usługi spoza autowiringu przekazujemy jawnie, odwołując się do ich nazwy:

```neon
services:
	- UserFacade(@database.another.connection)
```

Konfiguracja bazy danych

Przegląd opcji konfiguracyjnych dla Nette Database.

Jeśli nie używasz całego frameworku, tylko tej biblioteki, przeczytaj, jak wczytać konfigurację.

Jedno połączenie

Konfiguracja jednego połączenia z bazą danych:

database:
	# DSN, jedyny obowiązkowy klucz
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Utworzy to usługi Nette\Database\Connection i Nette\Database\Explorer, które przekazujemy zwykle przez autowiring albo odwołując się do ich nazwy.

Pozostałe ustawienia:

database:
	# pokazać panel bazy danych w Tracy Bar?
	debugger: ...     # (bool) domyślnie włączone, jeśli Tracy jest aktywne

	# pokazać EXPLAIN zapytań w Tracy Bar?
	explain: ...      # (bool) domyślnie true

	# włączyć autowiring dla tego połączenia?
	autowired: ...    # (bool) domyślnie true dla pierwszego połączenia

	# konwencje tabel: discovered, static albo nazwa klasy
	conventions: discovered  # (string) domyślnie 'discovered'

	options:
		# łączyć się z bazą danych dopiero wtedy, gdy jest potrzebna?
		lazy: ...     # (bool) domyślnie false

		# klasa sterownika bazy danych w PHP
		driverClass:  # (string)

		# tylko MySQL: ustawia sql_mode
		sqlmode:      # (string)

		# tylko MySQL: ustawia SET NAMES
		charset:      # (string) domyślnie 'utf8mb4'

		# tylko MySQL: konwertuje TINYINT(1) na bool
		convertBoolean: # (bool) domyślnie false

		# zwraca kolumny dat jako obiekty niezmienne (od wersji 3.2.1)
		newDateTime:  # (bool) domyślnie false

		# tylko Oracle i SQLite: format zapisu daty
		formatDateTime: # (string) domyślnie 'U'

Klucz options może zawierać także inne opcje, które znajdziesz w dokumentacji sterowników PDO, na przykład:

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Wiele połączeń

W konfiguracji możemy zdefiniować wiele połączeń z bazą danych, dzieląc je na nazwane sekcje:

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

	another:
		dsn: 'sqlite::memory:'

Autowiring jest włączony tylko dla usług z pierwszej sekcji. Można to zmienić za pomocą autowired: false albo autowired: true.

Usługi DI

Do kontenera DI dodawane są te usługi, gdzie ### oznacza nazwę połączenia:

Nazwa Typ Opis
database.###.connection Nette\Database\Connection połączenie z bazą danych
database.###.explorer Nette\Database\Explorer Database Explorer

Jeśli zdefiniujemy tylko jedno połączenie, nazwy usług będą brzmieć database.default.connection i database.default.explorer. Jeśli zdefiniujemy wiele połączeń jak w powyższym przykładzie, nazwy będą odpowiadać sekcjom, czyli database.main.connection, database.main.explorer, a także database.another.connection i database.another.explorer.

Usługi spoza autowiringu przekazujemy jawnie, odwołując się do ich nazwy:

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