Nette Documentation Preview

syntax
Konfigurace databáze
********************

.[perex]
Přehled konfiguračních voleb pro Nette Database.

Pokud nepoužívate celý framework, ale jen tuto knihovnu, přečtěte si, [jak konfiguraci načíst|bootstrap:].


Jedno spojení
-------------

Konfigurace jednoho databázového spojení:

```neon
database:
	# DSN, jediný povinný klíč
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...
```

Vytvoří služby `Nette\Database\Connection` a `Nette\Database\Explorer`, které si obvykle předáváme [autowiringem |dependency-injection:autowiring], případně odkazem na [jejich název |#Služby DI].

Další nastavení:

```neon
database:
	# zobrazit database panel v Tracy Bar?
	debugger: ...     # (bool) výchozí je true

	# zobrazit EXPLAIN dotazů v Tracy Bar?
	explain: ...      # (bool) výchozí je true

	# povolit autowiring pro toto spojení?
	autowired: ...    # (bool) výchozí je true u prvního připojení

	# konvence tabulek: discovered, static nebo jméno třídy
	conventions: discovered  # (string) výchozí je 'discovered'

	options:
		# připojovat se k databázi teprve když je potřeba?
		lazy: ...     # (bool) výchozí je false

		# PHP třída ovladače databáze
		driverClass:  # (string)

		# pouze MySQL: nastaví sql_mode
		sqlmode:      # (string)

		# pouze MySQL: nastaví SET NAMES
		charset:      # (string) výchozí je 'utf8mb4'

		# pouze MySQL: převádí TINYINT(1) na bool
		convertBoolean:  # (bool) výchozí je false

		# vrací sloupce s datem jako immutable objekty (od verze 3.2.1)
		newDateTime:  # (bool) výchozí je false

		# pouze Oracle a SQLite: formát pro ukládání data
		formatDateTime: # (string) výchozí je 'U'
```

V klíči `options` lze uvádět další volby, které najdete v [dokumentaci ovladačů PDO |https://www.php.net/manual/en/pdo.drivers.php], jako například:

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


Více spojení
------------

V konfiguraci můžeme definovat i více databázových spojení rozdělením do pojmenovaných sekcí:

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

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

Autowiring je zapnutý jen u služeb z první sekce. Lze to změnit pomocí `autowired: false` nebo `autowired: true`.


Služby DI
---------

Tyto služby se přidávají do DI kontejneru, kde `###` představuje název spojení:

| Název           | Typ                        | Popis
|----------------------------------------------------------
| `database.###.connection`  |  [api:Nette\Database\Connection]  |  spojení s databází
| `database.###.explorer`  |  [api:Nette\Database\Explorer]      |  [Database Explorer |explorer]


Pokud definujeme jen jedno spojení, názvy služeb budou `database.default.connection` a `database.default.explorer`. Pokud definujeme více spojení jako v příkladu výše, názvy budou odpovídat sekcím, tj. `database.main.connection`, `database.main.explorer` a dále `database.another.connection` a `database.another.explorer`.

Neautowirované služby předáváme explicitně odkazem na jejich název:

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

Konfigurace databáze

Přehled konfiguračních voleb pro Nette Database.

Pokud nepoužívate celý framework, ale jen tuto knihovnu, přečtěte si, jak konfiguraci načíst.

Jedno spojení

Konfigurace jednoho databázového spojení:

database:
	# DSN, jediný povinný klíč
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Vytvoří služby Nette\Database\Connection a Nette\Database\Explorer, které si obvykle předáváme autowiringem, případně odkazem na jejich název.

Další nastavení:

database:
	# zobrazit database panel v Tracy Bar?
	debugger: ...     # (bool) výchozí je true

	# zobrazit EXPLAIN dotazů v Tracy Bar?
	explain: ...      # (bool) výchozí je true

	# povolit autowiring pro toto spojení?
	autowired: ...    # (bool) výchozí je true u prvního připojení

	# konvence tabulek: discovered, static nebo jméno třídy
	conventions: discovered  # (string) výchozí je 'discovered'

	options:
		# připojovat se k databázi teprve když je potřeba?
		lazy: ...     # (bool) výchozí je false

		# PHP třída ovladače databáze
		driverClass:  # (string)

		# pouze MySQL: nastaví sql_mode
		sqlmode:      # (string)

		# pouze MySQL: nastaví SET NAMES
		charset:      # (string) výchozí je 'utf8mb4'

		# pouze MySQL: převádí TINYINT(1) na bool
		convertBoolean:  # (bool) výchozí je false

		# vrací sloupce s datem jako immutable objekty (od verze 3.2.1)
		newDateTime:  # (bool) výchozí je false

		# pouze Oracle a SQLite: formát pro ukládání data
		formatDateTime: # (string) výchozí je 'U'

V klíči options lze uvádět další volby, které najdete v dokumentaci ovladačů PDO, jako například:

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Více spojení

V konfiguraci můžeme definovat i více databázových spojení rozdělením do pojmenovaných sekcí:

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

	another:
		dsn: 'sqlite::memory:'

Autowiring je zapnutý jen u služeb z první sekce. Lze to změnit pomocí autowired: false nebo autowired: true.

Služby DI

Tyto služby se přidávají do DI kontejneru, kde ### představuje název spojení:

Název Typ Popis
database.###.connection Nette\Database\Connection spojení s databází
database.###.explorer Nette\Database\Explorer Database Explorer

Pokud definujeme jen jedno spojení, názvy služeb budou database.default.connection a database.default.explorer. Pokud definujeme více spojení jako v příkladu výše, názvy budou odpovídat sekcím, tj. database.main.connection, database.main.explorer a dále database.another.connection a database.another.explorer.

Neautowirované služby předáváme explicitně odkazem na jejich název:

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