FluentPDO — розумний конструктор SQL запитів

18

Від автора: При створенні веб-додатків дуже часто доводиться писати і виконувати дуже багато SQL запитів, що деколи не зовсім зручно. Тому в даному уроці я хотів би розповісти Вам про дуже цікавою бібліотеці – FluentPDO, яка є зручним і простим у використанні конструктором SQL запитів.

FluentPDO — розумний конструктор SQL запитівFluentPDO — розумний конструктор SQL запитів

Установка бібліотеки

Для початку, давайте встановимо бібліотеку FluentPDO, тому переходимо на сайт офіційного розробника і викачуємо дану бібліотеку:

FluentPDO — розумний конструктор SQL запитів

Після скачування ми отримали архів, який необхідно розпакувати. Після розпакування, переходимо в получившеюся папку, потім в каталог FluentPDO – це і є цікавить нас, бібліотека. Вихідні файли даної бібліотеки, необхідно скопіювати в один з каталогів Вашого сайту, я копіюю в папку lib. Після копіювання необхідно підключити файл FluentPDO.php до Вашому сайті або скрипту:

require_once «lib/FluentPDO.php»;

Далі, як випливає з назви, бібліотека FluentPDO, працює з використанням розширення по роботі з базою даних PDO. Тому насамперед необхідно створити підключення до бази даних, використовуючи PDO, іншими словами створити об’єкт класу PDO:

$pdo = new PDO(«mysql:dbname=fluentpdo»,’root’,»);

Для сьогоднішнього уроку, я буду використовувати тестову базу даних fluentpdo, з невеликою кількістю таблиць. Потім створюємо об’єкт головного класу бібліотеки FluentPDO і передаємо тільки що створений об’єкт класу PDO:

$fpdo = new FluentPDO($pdo);

На цьому установка бібліотеки завершена, приступаємо до роботи з нею:

Вибірка даних

Отже, для простої вибірки даних всій полів довільній таблиці, необхідно використовувати метод from(), передавши йому ім’я таблиці, дані якої необхідно отримати:

$query = $fpdo->from(‘news’);

Тепер давайте зобразимо дані на екрані, для цього достатньо пройтися в циклі по об’єкту $query:

$row) : ?>

Давайте відкриємо браузер і подивимося, що вийшло:

FluentPDO — розумний конструктор SQL запитів

Як Ви бачите, все працює відмінно. Зверніть увагу, як швидко ми отримали потрібні нам дані, при цьому нам не довелося вручну писати SQL запит, а потім використовуючи спеціальні функції, виконувати його. Далі, давайте розглянемо можливість фільтрації вибірки, тобто формування умови ВІДБОРУ в запиті до бази даних:

$query = $fpdo->from(‘pages’)->where(‘type’,’post’);

Метод where, додає в SQL запит конструкцію WHERE, і приймає в якості першого параметра, поле, по якому здійснюється фільтрації, а другим параметром — значення даного поля. При цьому на екрані ми побачимо відпрацювання, даного методу:

FluentPDO — розумний конструктор SQL запитів

Формування умови WHERE IN:

$query = $fpdo->from(‘type’)->where(‘in_header’,array(‘1′,’2′,’3′,’4’));

Для формування умови даного типу, використовується все той же метод where, за винятком того, що в другому параметрі передається масив параметрів конструкції IN, SQL – запиту. Дуже часто для фільтрації, необхідно перевіряти, чи задовольняє певній умові, деяке значення. Тому давайте зобразимо на екрані всі записи таблиці type, у яких поле in_header менше 4.

$query = $fpdo->from(‘type’)->where(‘in_header ‘4’));

Відмінність даного прикладу в тому, що першим параметром методу where, ми передаємо рядок, в якій вказуємо яке поле порівнюється і оператор порівняння. А замість значення вказуємо, спеціальну мітку, яка згодом, буде замінена на значення комірки масиву, який передається другим параметром методу. Зверніть увагу, що мітка – повністю збігається з ключем масиву, переданого у другому параметрі.

Так само хотів би продемонструвати повністю аналогічну за дії рядок, але записану дещо інакше:

$query = $fpdo->from(‘type’)->where(‘in_header < ?’,4);

Тут, в якості мітки використовується знак питання, який буде замінений, на значення другого параметра методу. При цьому на екрані ми побачимо наступне:

FluentPDO — розумний конструктор SQL запитів

Тепер давайте розглянемо умови формування WHERE AND, для цього при виклику методу where(), необхідно передати масив, при цьому перша клітинка – це фільтрація по даному параметру, а потім кожна наступна – це нове умова AND.

$query = $fpdo->from(‘stuff’)->where(array(‘brand_id’=>17,’publish’=>1));

У даному прикладі ми отримуємо всі записи з таблиці stuff, де ідентифікатор категорії дорівнює 17 і поле puglish = 1. Сортування даних у вибірці, а також обмеження кількості одержуваних даних можна реалізувати, викликавши наступні методи:

$query = $fpdo->from(‘stuff’)->limit(‘0,10’)->orderBy(‘title DESC’);

Метод limit, приймає два параметри: перший – це з якого елемента потрібно почати вибірку результатів, і другий – кількість вибраних записів. Метод orderBy, використовується для сортування вибірки. Параметром приймає всього один рядок з параметрами сортування елементів сценарію. Тепер давайте розглянемо, як вибрати тільки, що нас цікавлять поля, так як до цього ми отримували всі поля з таблиць:

$query = $fpdo->from(‘brands’)
-> select(null)
->select(array(‘brand_name’,’parent_id’))

Зверніть увагу, що якщо потрібно вибрати тільки певні поля, то насамперед необхідно викликати метод select(null) і передати йому як параметр значення null, тим самим, скинувши отримання всіх полів бази даних. Потім викликаємо метод select повторно і передаємо йому, ті поля, які необхідно отримати з бази даних – у вигляді масиву.

Тепер давайте розглянемо, як виконати вибірку даних, використовуючи ліве об’єднання таблиць:

$query = $fpdo->from(‘brands’)
->select(null)
->select(array(‘brands.brand_name’,’brands.parent_id’))
->leftJoin(«stuff ON stuff.brand_id=brands.brand_id»)
->select(«stuff.title»,’stuff.price’);

Як Ви бачите, для лівого об’єднання, досить викликати метод leftJoin і передати йому рядок – параметр, в якому зазначений ознака об’єднана таблиць. Тобто в даному прикладі, я вибираю дані з таблиці brands, а також з таблиці stuff. Аналогічно якщо потрібно використовувати поєднання INNER JOIN, необхідно викликати метод innerJoin():

$query = $fpdo->from(‘brands’)
->select(null)
->select(array(‘brands.brand_name’,’brands.parent_id’))
-> innerJoin («stuff ON stuff.brand_id=brands.brand_id»)
->select(«stuff.title»,’stuff.price’);

Редагування даних

Бібліотека FluentPDO, також крім отримання даних, дуже добре вміє редагувати дані у базі даних. Для початку, давайте додамо дані в одну з таблиць:

$values = array(‘brand_name’=>’Тестова категорія Оновлено’, ‘parent_id’=>1);
$fpdo->insertInto(‘brands’)->values($values)->execute();

Для цього створюємо масив містить дані для вставки. Ключі даного масиву – це імена полів, які будуть вставлені дані, а значення клітинок – це значення, які будуть додані в відповідні поля. Далі для вставки викликаємо метод insertInto(), передаємо йому, як параметром, ім’я таблиці, в яку додаються дані. Потім викликаємо метод values($values), в якому вказуємо масив даних для вставки. І в завершенні викликаємо метод execute(), який виконує сформований SQL запит.

Для оновлення існуючих записів, необхідно скористатися наступними методами:

$values = array(‘brand_name’=>’Тестова категорія Оновлено’, ‘parent_id’=>1);
$fpdo->update(‘brands’)->set($values)->where(«brand_id»,40)->execute();

Тут масив $values – це масив полів і значень, які потрібно оновити. При виклику методу update, необхідно вказати ім’я таблиці, поля якої підлягають оновленню, в свою чергу метод set(), приймає як параметр масив $values. При оновленні даних, необхідно викликати, вже знайомий нам метод where, який вкаже які саме поля слід оновити. І в завершенні, викликаємо метод execute(), який виконує SQL запит і тим самим, оновить дані.

Для видалення даних з таблиць, використовується метод deleteFrom(), який приймає параметром, назва таблиці, яку потрібно видалити. Так само при виклику цього методу, можна викликати метод where(), за допомогою якого можна вказати які саме поля, підлягають видаленню.

$fpdo->deleteFrom(‘brands’)->where(‘brand_id’,40)->execute();

Як Ви бачите, бібліотека дуже корисна, звичайно, вона підійде не для всіх проектів, так як її функціонал все ж обмежений. Але для не складних сайтів, де необхідно створювати і виконувати велику кількість різних запитів до бази даних – вона цілком підійде.

На цьому даний урок завершено. Всього Вам доброго і вдалого кодування.