Nette Documentation Preview

syntax
Конфигурация на базата данни
****************************

.[perex]
Преглед на конфигурационните опции за Nette Database.

Ако не използвате целия framework, а само тази библиотека, прочетете [как да заредите конфигурацията|bootstrap:].


Една връзка
-----------

Конфигурация на една връзка към база данни:

```neon
database:
	# DSN, единственият задължителен ключ
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...
```

Създава сървисите `Nette\Database\Connection` и `Nette\Database\Explorer`, които обикновено предаваме чрез [autowiring |dependency-injection:autowiring], или чрез връзка към [тяхното име |#DI Сървиси].

Други настройки:

```neon
database:
	# покажи панела на базата данни в Tracy Bar?
	debugger: ...     # (bool) по подразбиране е true

	# покажи EXPLAIN на заявките в Tracy Bar?
	explain: ...      # (bool) по подразбиране е true

	# разреши autowiring за тази връзка?
	autowired: ...    # (bool) по подразбиране е true при първата връзка

	# конвенции за таблици: discovered, static или име на клас
	conventions: discovered  # (string) по подразбиране е 'discovered'

	options:
		# свързване към базата данни само когато е необходимо?
		lazy: ...     # (bool) по подразбиране е false

		# PHP клас на драйвера на базата данни
		driverClass:  # (string)

		# само MySQL: задава sql_mode
		sqlmode:      # (string)

		# само MySQL: задава SET NAMES
		charset:      # (string) по подразбиране е 'utf8mb4'

		# само MySQL: преобразува TINYINT(1) в bool
		convertBoolean:  # (bool) по подразбиране е false

		# връща колони с дата като immutable обекти (от версия 3.2.1)
		newDateTime:  # (bool) по подразбиране е false

		# само Oracle и SQLite: формат за съхранение на дата
		formatDateTime: # (string) по подразбиране е 'U'
```

В ключа `options` могат да се посочват други опции, които ще намерите в [документацията на PDO драйверите |https://www.php.net/manual/en/pdo.drivers.php], като например:

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


Множество връзки
----------------

В конфигурацията можем да дефинираме и множество връзки към бази данни, като ги разделим на именувани секции:

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

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

Autowiring е включен само за сървисите от първата секция. Това може да се промени с помощта на `autowired: false` или `autowired: true`.


DI Сървиси
----------

Тези сървиси се добавят към DI контейнера, където `###` представлява името на връзката:

| Име           | Тип                        | Описание
|----------------------------------------------------------
| `database.###.connection`  |  [api:Nette\Database\Connection]  |  връзка с базата данни
| `database.###.explorer`  |  [api:Nette\Database\Explorer]      |  [Database Explorer |database:explorer]


Ако дефинираме само една връзка, имената на сървисите ще бъдат `database.default.connection` и `database.default.explorer`. Ако дефинираме повече връзки, както в примера по-горе, имената ще отговарят на секциите, т.е. `database.main.connection`, `database.main.explorer` и след това `database.another.connection` и `database.another.explorer`.

Сървисите, които не са autowired, предаваме изрично чрез връзка към тяхното име:

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

Конфигурация на базата данни

Преглед на конфигурационните опции за Nette Database.

Ако не използвате целия framework, а само тази библиотека, прочетете как да заредите конфигурацията.

Една връзка

Конфигурация на една връзка към база данни:

database:
	# DSN, единственият задължителен ключ
	dsn: "sqlite:%appDir%/Model/demo.db"
	user: ...
	password: ...

Създава сървисите Nette\Database\Connection и Nette\Database\Explorer, които обикновено предаваме чрез autowiring, или чрез връзка към тяхното име.

Други настройки:

database:
	# покажи панела на базата данни в Tracy Bar?
	debugger: ...     # (bool) по подразбиране е true

	# покажи EXPLAIN на заявките в Tracy Bar?
	explain: ...      # (bool) по подразбиране е true

	# разреши autowiring за тази връзка?
	autowired: ...    # (bool) по подразбиране е true при първата връзка

	# конвенции за таблици: discovered, static или име на клас
	conventions: discovered  # (string) по подразбиране е 'discovered'

	options:
		# свързване към базата данни само когато е необходимо?
		lazy: ...     # (bool) по подразбиране е false

		# PHP клас на драйвера на базата данни
		driverClass:  # (string)

		# само MySQL: задава sql_mode
		sqlmode:      # (string)

		# само MySQL: задава SET NAMES
		charset:      # (string) по подразбиране е 'utf8mb4'

		# само MySQL: преобразува TINYINT(1) в bool
		convertBoolean:  # (bool) по подразбиране е false

		# връща колони с дата като immutable обекти (от версия 3.2.1)
		newDateTime:  # (bool) по подразбиране е false

		# само Oracle и SQLite: формат за съхранение на дата
		formatDateTime: # (string) по подразбиране е 'U'

В ключа options могат да се посочват други опции, които ще намерите в документацията на PDO драйверите, като например:

database:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true

Множество връзки

В конфигурацията можем да дефинираме и множество връзки към бази данни, като ги разделим на именувани секции:

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

	another:
		dsn: 'sqlite::memory:'

Autowiring е включен само за сървисите от първата секция. Това може да се промени с помощта на autowired: false или autowired: true.

DI Сървиси

Тези сървиси се добавят към DI контейнера, където ### представлява името на връзката:

Име Тип Описание
database.###.connection Nette\Database\Connection връзка с базата данни
database.###.explorer Nette\Database\Explorer Database Explorer

Ако дефинираме само една връзка, имената на сървисите ще бъдат database.default.connection и database.default.explorer. Ако дефинираме повече връзки, както в примера по-горе, имената ще отговарят на секциите, т.е. database.main.connection, database.main.explorer и след това database.another.connection и database.another.explorer.

Сървисите, които не са autowired, предаваме изрично чрез връзка към тяхното име:

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