Конфигурация базы данных
Обзор опций конфигурации для 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)