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