FluentPDO — это построитель PHP-запросов SQL с использованием PDO. Это быстрая и легкая библиотека с интеллектуальным построителем соединений, который автоматически создает для вас объединения таблиц.
Простой интерфейс для создания надежных запросов
Поддерживает любую базу данных, совместимую с PDO.
Возможность создавать сложные запросы SELECT, INSERT, UPDATE и DELETE с небольшим количеством кода.
Подсказки типов для магических методов с автодополнением кода в интеллектуальных IDE
Стабильная версия FluentPDO активно поддерживается. Официально поддерживается PHP 7.3–PHP 8.0, но может работать и с предыдущими версиями PHP 7.
Устаревшая версия FluentPDO. Он больше не поддерживается и не будет поддерживаться или обновляться. Эта версия работает с PHP 5.4–7.1.
Эта версия представляет собой полную переработку Fluent с нуля. Его главное преимущество — значительно меньшее использование памяти и гораздо более высокая производительность при построении запросов. Он также накладывает несколько дополнительных ограничений, чтобы упростить чтение и поддержку запросов. Документация также была очень частым запросом, и версия 3 полностью документируется одновременно с разработкой. Подробности и показатели будут опубликованы, как только они станут доступны.
Sitepoint — начало работы с FluentPDO
Предпочтительный способ установки FluentPDO — через композитор.
Добавьте следующую строку в файл composer.json
:
"require": { ... "envms/fluentpdo": "^2.2.0" }
обновите свои зависимости с помощью composer update
, и все готово!
Если вы предпочитаете не использовать композитор, загрузите последнюю версию, создайте каталог Envms/FluentPDO
в каталоге вашей библиотеки и поместите в него этот репозиторий. Наконец, добавьте:
требуется «[lib-dir]/Envms/FluentPDO/src/Query.php»;
в начало вашего приложения. Примечание. Чтобы использовать FluentPDO без изменения исходного кода, вам понадобится автозагрузчик.
Создайте новый экземпляр PDO и передайте его в FluentPDO:
$pdo = новый PDO('mysql:dbname=fluentdb', 'пользователь', 'пароль'); $fluent = новый EnvmsFluentPDOQuery($pdo);
Тогда создание запросов становится быстрым и простым:
$query = $fluent->from('комментарий') ->where('article.published_at > ?', $date) ->orderBy('опубликовано_в DESC') -> лимит(5);
который построит запрос ниже:
ВЫБЕРИТЕ комментарий.*FROM commentLEFT ПРИСОЕДИНЯЙТЕСЬ к статье ON article.id = comment.article_idГДЕ статья.published_at > ?ORDER BYarticle.published_at DESCLIMIT 5
Чтобы получить данные из выбора, все, что мы делаем, это перебираем возвращаемый массив:
foreach ($query as $row) {echo "$row['title']n"; }
Начнем с традиционного соединения ниже:
$query = $fluent->from('статья') ->leftJoin('пользователь включен user.id =article.user_id') ->select('user.name');
Это довольно многословно и не очень умно. Если в ваших таблицах используются правильные имена первичного и внешнего ключей, вы можете сократить приведенное выше до:
$query = $fluent->from('статья') ->leftJoin('пользователь') ->select('user.name');
Это лучше, но не идеально. Однако было бы еще проще не писать никаких соединений :
$query = $fluent->from('статья') ->select('user.name');
Потрясающе, правда? FluentPDO может создать соединение за вас, добавив имя внешней таблицы к запрошенному столбцу.
Все три приведенных выше фрагмента создадут один и тот же запрос:
ВЫБРАТЬ статью.*, имя пользователя ИЗ статьи ЛЕВОЕ ПРИСОЕДИНЕНИЕ к пользователю ON user.id =article.user_id
Наконец, всегда полезно освобождать ресурсы, как только они завершат свои обязанности:
$fluent->закрыть();
$query = $fluent->from('article')->where('id', 1)->fetch(); $query = $fluent->from('user', 1)->fetch(); // более короткая версия, если выбрана одна строка по первичному ключу
$values = array('title' => 'статья 1', 'content' => 'content 1'); $query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluent->insertInto('article', $values)->execute(); // более короткая версия
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->execute();$query = $fluent->update('article', $set, 1)->execute(); // более короткая версия, если обновляется одна строка по первичному ключу
$query = $fluent->deleteFrom('article')->where('id', 1)->execute(); $query = $fluent->deleteFrom('article', 1)->execute(); // более короткая версия, если удаляется одна строка по первичному ключу
Примечание . Запросы INSERT, UPDATE и DELETE будут выполняться только после вызова ->execute()
Бесплатно для коммерческого и некоммерческого использования по лицензиям Apache 2.0 или GPL 2.0.