Translate
Эта версия фреймворка устарела, воспользуйтесь HLEB2

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

Скачать Скачать с GitHub
Предназначение Установить Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Регистрация API 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 отключает установку обратных слешей (`) в табличных именованиях.

Миграции

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



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



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

Задать вопрос в блоге, который сделан с использованием фреймворка HLEB.

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

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