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

Огляд параметрів конфігурації для 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.

Сервіси без autowiring передаються явно за посиланням на їхню назву:

services:
	- UserFacade(@database.another.connection)
версія: 4.0