База данных Nette
Nette Database – это мощный и элегантный слой баз данных для PHP с акцентом на простоту и интеллектуальные функции. Он предлагает два взаимодополняющих способа работы с данными – с помощью проводника для быстрой разработки или с помощью SQL для полного контроля над запросами.
Способ SQL
- Безопасные, параметризованные запросы
- Точный контроль над структурой SQL-запросов
- Идеально подходит для написания сложных запросов с расширенными функциями
- Оптимизация производительности с помощью специальных функций SQL
Путь исследователя
- Быстрая разработка без написания SQL
- Интуитивно понятная обработка отношений между таблицами
- Автоматическая оптимизация запросов
- Отлично подходит для быстрого и удобного взаимодействия с базой данных
Установка
Вы можете загрузить и установить библиотеку с помощью Composer:
Поддерживаемые базы данных
Nette Database поддерживает следующие базы данных:
Сервер базы данных | Имя DSN | Поддержка проводника |
---|---|---|
MySQL (>= 5.1) | mysql | YES |
PostgreSQL (>= 9.0) | pgsql | YES |
SQLite 3 (>= 3.8) | sqlite | YES |
Oracle | oci | NO |
MS SQL (PDO_SQLSRV) | sqlsrv | YES |
MS SQL (PDO_DBLIB) | mssql | NO |
ODBC | odbc | NO |
Два подхода к работе с базами данных
С помощью Nette Database вы можете либо писать SQL-запросы напрямую (способ SQL), либо позволить SQL генерироваться автоматически (способ Explorer). Давайте посмотрим, как оба подхода решают одни и те же задачи:
Способ SQL – написание SQL-запросов
Путь проводника – автоматическая генерация SQL
Подход Explorer генерирует и оптимизирует SQL-запросы автоматически. В приведенном выше примере способ SQL генерирует N+1 запрос (один для авторов и один для книг каждого автора), в то время как Explorer выполняет только два оптимизированных запроса – один для авторов и другой для всех их книг.
Вы можете свободно комбинировать оба подхода в своем приложении по мере необходимости.
Подключение и конфигурация
Чтобы подключиться к базе данных, просто создайте экземпляр класса Nette\Database\Connection:
Параметр $dsn
(имя источника данных) имеет тот же формат, что и в PDO, например,
host=127.0.0.1;dbname=test
. Если соединение не удается, выбрасывается
ошибка Nette\Database\ConnectionException
.
Однако более удобным методом является использование конфигурации приложения. Добавьте секцию database
,
и необходимые объекты будут созданы, включая панель базы данных в
отладочной панели Tracy.
После этого объект соединения можно получить как сервис из контейнера DI, например:
Дополнительные сведения см. в разделе Конфигурация базы данных.
Создание проводника вручную
Если вы не используете контейнер Nette DI, вы можете вручную создать
экземпляр Nette\Database\Explorer
:
Управление соединениями
Когда вы создаете объект Connection
, он подключается к базе данных
автоматически. Если вы хотите отложить подключение, включите ленивый
режим в конфигурации, установив lazy
, или
сделайте это следующим образом:
Для управления подключением используйте методы connect()
,
disconnect()
и reconnect()
.
connect()
устанавливает соединение, если оно еще не было установлено, и может выбросить ошибкуNette\Database\ConnectionException
.disconnect()
отсоединяется от базы данных.reconnect()
отключается, а затем снова подключается к базе данных и может также выдать ошибкуNette\Database\ConnectionException
.
Кроме того, вы можете отслеживать события подключения с помощью
события onConnect
, которое представляет собой массив обратных
вызовов, выполняемых после подключения к базе данных.
Панель отладки Трейси
Если вы используете Tracy, панель Database в Debug Bar включается автоматически. На ней отображаются все выполненные запросы, их параметры, время выполнения и место в коде, где они были вызваны.
