Translate

PHP Микрофреймворк HLEB

Скачать Скачать с GitHub
Предназначение Установить Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Регистрация DI Дополнительно

Базы данных

Реализация подключения к одной базе данных или нескольким остается на усмотрение разработчика сайта. Тем не менее рекомендуются два варианта:

DB

В папке "database" расположен файл "DB.php", содержащий статический класс "DB". Через этот класс можно обращаться к базе данных через PDO, соответственно есть поддержка MySQL и PostgreSQL.
Установка подключения описана в разделе данной инструкции «Настройка».

XD ORM

На самом деле XD ORM - это оболочка над PHP PDO, разработанная специально для фреймворка HLEB. Она простая и соответствует общему предназначению микрофреймворка.

XD ORM не входит в изначальную комплектацию фреймворка, поэтому её необходимо скопировать в папку с библиотеками vendor/phphleb из репозитория github.com/phphleb/xdorm или установить при помощи Composer:
$ composer require phphleb/xdorm
Подключение к проекту:
// Файл /app/Optional/MainConnect.php ... [ "XdORM\XD" => "vendor/phphleb/xdorm/XD.php" ] ...
Вы можете составлять запросы в базовом стиле SQL для выбранной СУБД (любая, поддерживаемая PDO). Основная задача, реализуемая в данной ORM, это превратить строку запроса в защищённую строку запроса.

При знании синтаксиса SQL можно приступать к написанию модели сразу. Этот синтаксис трактуется следующим образом для команд:
use XdORM\XD; XD::any(); // 'ANY' XD::any_words(); // 'ANY_WORDS' XD::anyWords(); // 'ANY WORDS' XD::any()->words(); // 'ANY WORDS'
Для табличных названий достаточно передать их в массиве:
$query = XD::select(['id', 'name', 'email'])->from(['users']); // SELECT `id`, `name`, `email` FROM `users`
Значения вставляются как есть, но все строковые значения, кроме операторов и спецсимволов SQL, будут проверены встроенными средствами PDO:
$query = XD::select('*')->from(['users'])->where(['name'], '!=', "d'Artanyan")->and(['id'], '=', 1)->limit(1); // SELECT * FROM `users` WHERE `name` != 'd\'Artanyan' AND `id` = 1 LIMIT 1
$query = XD::select('*')->from(['users'])->where(['id'])->in('(', 15, ',', 43, ',', 60, ',', 71, ')'); // SELECT * FROM `users` WHERE `id` IN ( 15, 43, 60, 71 )
Чтобы передать массив значений существует специальный метод setList():
$ids = [15, 43, 60, 71]; $query = XD::select('*')->from(['users'])->where(['id'])->in('(', XD::setList($ids), 90,')'); // SELECT * FROM `users` WHERE `id` IN ( 15, 43, 60, 71, 90 )
Соединение частей запроса может быть произведено между возвращаемыми объектами XD в любом порядке:
$select_user_id = XD::select(['id'])->from(['users'])->where(['id'], '=', 15); $query = XD::select('*')->from(['tasks'])->where(['user_id'], '=', '(', $select_user_id, ')');
Или так:
$q = XD::select('*')->from(['users']);
$query = $q->limit(100); // SELECT * FROM `users` LIMIT 100
// или (но не "и", так как произойдет конкатенация с предыдущим действием)
$query = $q->leftJoin(['tasks'])->on(['users.id'], '=', ['tasks.user_id']); // SELECT * FROM `users` LEFT JOIN `tasks` ON `users`.`id` = `tasks`.`user_id`
Теперь необходимо выполнить этот запрос и получить результат, если он подразумевается. Для запросов с возвращением данных существуют следующие методы:
$result = $query->getSelectOne(); // Получение одной строки в именованный массив. $result = $query->getSelectValue(); // Получение одного значения. $result = $query->getSelect(); // Возвращает массив строк в виде именованных массивов. $result = $query->getSelectAll(); // Возвращает массив из объектов, значения которых можно получить по полям объектов. $result = $query->toString(); // Возвращает текущую строку запроса (без параметров).
$query = XD::selectCount('(*)')->from(['users'])->where(['name'])->like(['copy[_]%'])->getSelectValue(); // SELECT COUNT(*) FROM `users` WHERE `name` LIKE 'copy[_]%'
Для всех остальных запросов, не возвращающих результирующий набор, достаточно добавить run(), чтобы выполнить запрос. Любой запрос, в котором вместо исполняющего метода использован toString(), вернёт строковое представление текущего запроса.
XD::update(['users'])->set(['name'], '=', 'admin')->where(['id'], '=', 1)->run(); XD::dropTable(['users'])->run(); // Удаление таблицы `users`.
В исключительных случаях можно использовать для запросов метод execute(), возвращающий объект PDOStatement, и производить дальнейшие действия с последним согласно документации PDO.

Использование нескольких соединений

Подключение конфигурационного файла описано в разделе данной инструкции «Настройка».

Конфигурационный файл может содержать различные варианты соединений с базами данных, по умолчанию используется заданное имя подключения из константы HLEB_TYPE_DB. Чтобы выполнить запрос к любой из указанных в конфигурационном файле баз данных, необходимо указать её название в используемом методе выполнения запроса. Например run('postgresql.first'), getSelectOne('postgresql.second') или getSelect('mysql.name'). Запрос будет выполнен с указанными настройками.

Необязательная константа HLEB_DB_DISABLE_REVERSE_QUOTES отключает установку обратных слешей (`) в табличных именованиях.

Миграции

Для миграций можно использовать библиотеку Phinx.



Предназначение Установить Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Регистрация DI Дополнительно



Группа поддержки в Телеграм - @phphleb

Этот сайт-инструкция к фреймворку HLEB сделан с использованием фреймворка HLEB.

HLEB - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019-2021