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