Nette Documentation Preview

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

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

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


Една връзка .[#toc-single-connection]
-------------------------------------

Създайте единична връзка към базата данни:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```neon
база данных:
	options:
		PDO::MYSQL_ATTR_COMPRESS: true
```


Множество връзки .[#toc-multiple-connections]
---------------------------------------------

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

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

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

Автоматичното свързване е разрешено само за услугите от първия раздел. Това може да се промени с помощта на `autowired: false` или `autowired: true`.


Услуги на DI .[#toc-di-services]
--------------------------------

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

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


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

Неавтентифицираните услуги предаваме изрично, като се позоваваме на тяхното име:

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

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

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

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

Една връзка

Създайте единична връзка към базата данни:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

база данных:
	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:'

Автоматичното свързване е разрешено само за услугите от първия раздел. Това може да се промени с помощта на 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.

Неавтентифицираните услуги предаваме изрично, като се позоваваме на тяхното име:

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