Конструктор запросов в Joomla
В Joomla версии 1.6 появился новы класс JDatabaseQuery который позволяет создавать запросы в объектно-ориентированном виде.
Этот класс позволяет разработчику указывать отдельные часть SQL запроса в виде вызова определенных методов данного класса, которые в последствии собираются в единый SQL запрос.
Поскольку класс JDatabaseQuery является абстрактным то мы не сможем создать объект его класса напрямую, и для того что бы получить объект для составления запросов нужно пользоваться следующим кодом:
//если мы хотим получить объект в модели компонента $query = $this->getDbo()->getQuery( true ); //В других случаях $db = JFactory::getDbo(); $query = $db->getQuery(true);
После получения объекта мы можем приступить к созданию запроса! допустим для выборки всех опубликованных записей из таблицы #__content нужно написать следующий код:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*');
$query->from('#__content');
$query->where('state=1');
//получение результата запроса в виде объекта
$list = $db->setQuery($query)->loadObjectList();
запрос примет вид: SELECT * FROM #__content WHERE state=1
удобство данного класса в том что мы можем в любую секунду добавить любое условие например если нам нужно ещё выбрать записи которые созданы пользователем с created_by=42 то нужно добавить:
$query->where('created_by=42');
И в результате этого будет к общему запросу добавлено условие AND created_by=42 и запрос примет вид
SELECT * FROM #__content WHERE state=1 AND created_by=42
Класс JDatabaseQuery имеет следующие поля:
| Метод | Описание |
|---|---|
| clear | Очистить запрос для создания нового |
| select | Выборка полей из таблицы или таблиц |
| delete | Удаление из указанной таблицы данных |
| insert | Вставка данных в указанную таблицу |
| update | Обновление данных в указанной иаблице |
| from | Из какой таблицы выбирать данные |
| join | Позволяет присоеденять записи двух таблиц |
| innerJoin | Оператор внутреннего соединения |
| outerJoin | Присоединение таблицы с необязательным присутствием записи в таблице |
| leftJoin | возвращает строки из левой таблицы(table_name1), даже если их нет в правой таблице (table_name2). |
| rightJoin | возвращает строки из правой таблицы(table_name2), даже если их нет левой таблице (table_name1). |
| set | Метод служит для обновления данных в записи или записях, работает в связке с оператором update |
| where | Метод служит для создания условий в запросе |
| group | Метод для создании групировки результата или нескольких столбцов |
| order | Метод для создании сортировки результато по определенному полю |