Настройка базы данных

Обзор вариантов конфигурации для базы данных Nette.

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

Одно подключение

Настройте одно подключение к базе данных:

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

Он создает службы типа Nette\Database\Connection, а также Nette\Database\Explorer для уровня Database Explorer. Подключение к базе данных обычно передается автоподключением, если это невозможно, используйте имена сервисов @database.default.connection и @database.default.context.

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

database:
	# отображает панель Database в Tracy Bar
	debugger: ...     # (bool) по умолчанию true

	# отображает запрос EXPLAIN в Tracy Bar
	explain: ...      # (bool) по умолчанию true

	# включить автосвязывание для этого соединения
	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' ('utf8' до v5.5.3)

		# только для Oracle и SQLite: формат даті
		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:'

Каждое определенное соединение создает сервисы, включающие имя секции в свое имя, т. е. @database.main.connection & @database.main.context и далее @database.another.connection & @database.another.context.

Автосвязывание включено только для сервисов из первой секции. Это можно изменить с помощью autowired: false или autowired: true. Неавтоматизированные сервисы передаются по имени:

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