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

Обзор параметров конфигурации Nette Database.

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

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

Настройка одного соединения с базой данных:

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

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

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

database:
	# показывать панель базы данных в Tracy Bar?
	debugger: ...     # (bool) по умолчанию включено, если Tracy активна

	# показывать 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

		# возвращает столбцы с датой как неизменяемые объекты (начиная с версии 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.

Сервисы, не участвующие в autowiring, мы передаём явно, ссылаясь на их имя:

services:
	- UserFacade(@database.another.connection)
версия: 4.x