Пример простого запроса SELECT из одной таблицы:
// Подключаемся к базе данных
$db = JFactory::getDbo();
// Создаем новый объект запроса
$query = $db->getQuery(true);
// Извлекаем из таблицы профилей все записи,
//где тип профиля начинается с "custom"
// Добавляем сортировку
$query->select(array('user_id', 'profile_type', 'profile_value', 'ordering'));
$query->from('#__user_profiles');
$query->where('profile_type LIKE \'custom.%\'');
$query->order('ordering ASC');
// Устанавливаем запрос
$db->setQuery($query);
// Загружаем результат как список stdClass объектов
$results = $db->loadObjectList();
Если запрос достаточно длинный, то можно использовать более лаконичную форму:
$query
->select(array('user_id', 'profile_type', 'profile_value', 'ordering'))
->from('#__user_profiles')
->where('profile_type LIKE \'custom.%\'')
->order('ordering ASC');
Пример извлечения данных из нескольких таблиц:
// Подключаемся к базе данных
$db = JFactory::getDbo();
// Создаем новый объект запроса
$query = $db->getQuery(true);
// Извлекаем все статьи пользователей, чье имя начинается с 'a'
// Упорядочиваем по дате создания
$query
->select(array('a.*', 'b.username', 'b.name'))
->from('#__content AS a')
->join('INNER', '#__users AS b ON (a.created_by = b.id)')
->where('b.username LIKE \'a%\'')
->order('a.created DESC');
// Устанавливаем запрос
$db->setQuery($query);
//Загружаем результаты как список stdClass объектов.
$results = $db->loadObjectList();
То же самое, но записанное в более компактной форме:
$query
->select(array('a.*', 'b.username', 'b.name', 'c.*', 'd.*'))
->from('#__content AS a')
->join('INNER', '#__users AS b ON (a.created_by = b.id)')
->join('LEFT', '#__user_profiles AS c ON (b.id = c.user_id)')
->join('RIGHT', '#__categories AS d ON (a.catid = d.id)')
->where('b.username LIKE \'a%\'')
->order('a.created DESC');
Запросы типа INSERT
// Подключаемся к базе данных
$db = JFactory::getDbo();
// Создаем новый объект запроса
$query = $db->getQuery(true);
// Столбцы, куда происходит вставка
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');
// Значения
$values = array(1001,
$db->quote('custom.message'),
$db->quote('Inserting a record using insert()'),
1);
// Подготавливаем запрос
$query
->insert($db->quoteName('#__user_profiles'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
// Устанавливаем запрос
$db->setQuery($query);
UPDATE запросы
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Обновляемые поля
$fields = array(
'profile_value=\'Обновляем custom сообщение для пользователя с id = 42\'',
'ordering=2');
// Условия
$conditions = array(
'user_id=42',
'profile_key=\'custom.message\'');
$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
try {
$result = $db->query();
catch (Exception $e) {
// Ловим ошибку
}
Также мы можем обновлять таблицы в базе данных, используя объекты
// Создаем объект для записи, которую мы собираемся обновлять
$object = new stdClass();
// Задаем значения
$object->id = 1;
$object->title = 'Моя запись';
$object->description = 'Мы обновляем запись в базе данных';
try {
// Обновляем данные в таблице пользователей, используя id как the primary key.
$result = JFactory::getDbo()->updateObject('#__custom_table', $object, 'id');
} catch (Exception $e) {
// ловим ошибку
}
Пример запроса DELETE
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Удаляем все custom ключи для пользователя 1001.
$conditions = array(
'user_id=1001',
'profile_key LIKE \'custom.%\'');
$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);
$db->setQuery($query);
try {
$result = $db->query();
} catch (Exception $e) {
// ловим ошибку
}