В 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 Метод для создании сортировки результато по определенному полю