Nette Documentation Preview

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

.[perex]
Обзор опций конфигурации для Nette Database.

Если вы не используете весь фреймворк, а только эту библиотеку, прочитайте, [как загрузить конфигурацию|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 |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.

Если вы не используете весь фреймворк, а только эту библиотеку, прочитайте, как загрузить конфигурацию.

Одно соединение

Конфигурация одного соединения с базой данных:

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.

Неавтовайренные сервисы передаем явно по ссылке на их имя:

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