Работа с базой данных в Joomla


Работа с базой данных в Joomla 2.5

Пример простого запроса SELECT из одной таблицы:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Подключаемся к базе данных
$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();

Если запрос достаточно длинный, то можно использовать более лаконичную форму:

1
2
3
4
5
$query
    ->select(array('user_id', 'profile_type', 'profile_value', 'ordering'))
    ->from('#__user_profiles')
    ->where('profile_type LIKE \'custom.%\'')
    ->order('ordering ASC');

Пример извлечения данных из нескольких таблиц:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Подключаемся к базе данных
$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();

То же самое, но записанное в более компактной форме:

1
2
3
4
5
6
7
8
$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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Подключаемся к базе данных
$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 запросы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$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) {
    // Ловим ошибку
}

Также мы можем обновлять таблицы в базе данных, используя объекты

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Создаем объект для записи, которую мы собираемся обновлять
$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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$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) {
   // ловим ошибку
}




Другие посты

Категория: Joomla

Комментарии (3)

 

  1. kikookik:

    Hello; nice post. How to add a new article into a specific category, for example the category id = 49 ?

    This is an example, but need some correction to work properly.

    $db = &JFactory::getDBO();
    $query = $db->getQuery(true);
    $query = «INSERT INTO `#__content`
    SET `title` = ‘{meeeeee}’,
    `alias` = ‘kfjkjdf-457′,
    `fulltext` = ‘{ghfjhjfhgjf}’,
    `state` = ‘1’,
    `catid` = ’49’,
    `sectionid` = ‘0’,
    `mask` = ‘0’,
    `created` = ‘».date(«Y-m-d H:i:s»).»‘,
    «;
    $db->setQuery($query);
    $db->query();

  2. admin:

    It’s correct. Do you have the problem with this code?

  3. Александр:

    Добрый день!
    есть простое меню вида

    <!—

    пункт первый

    подпункт первый
    подпункт второй

    пункт второй
    пункт третий

    —>

    Вопрос — как программно напрямую внести это меню в меню joomla3. Я так понимаю это надо делать через базу данных joomla? Прошу Вашей помощи!!!
    Спасибо!

Оставить комментарий