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

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

Базы данных

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

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(); // (string) ANY XD::any_words(); // (string) ANY_WORDS XD::anyWords(); // (string) ANY WORDS XD::any()->words(); // (string) 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 )
Чтобы передать массив значений существует специальный метод addArray():
$ids = [15, 43, 60, 71]; $query = XD::select('*')->from(['users'])->where(['id'])->in('(', XD::addArray($ids),')'); // SELECT * FROM `users` WHERE `id` IN ( 15, 43, 60, 71 )
Соединение частей запроса может быть произведено между возвращаемыми объектами 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(); // Возвращает массив из объектов, значения которых можно получить по полям объектов.
Для всех остальных запросов, не возвращающих результирующий набор, достаточно добавить run(), чтобы выполнить запрос.
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 - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019