Главная/Wiki/Запросы к базе данных в Modx Revo

Wiki · MODX

Запросы к базе данных в Modx Revo

Запросы к БД в MODX Revolution: newQuery, xPDO и типовые выборки ресурсов.

Функция newQuery()

Выведем 10 последних опубликованных ресурсов и автора публикации несколькими способами.

// новый запрос
$query = $modx->newQuery('modResource');
// связь таблиц site_content и users
$query->innerJoin('modUser', 'key', "key.id = modResource.createdby");
// выбираем название статьи и имя пользователя который публикует статью
$query->select('modResource.pagetitle, key.username'); 
// Обратная сортировка по дате публикации
$query->sortby('modResource.createdon', 'DESC');
// выбираем 10 записей
$query->limit(10);

// если запрос подготовлен и выполнен
if ($query->prepare() && $query->stmt->execute()) {
// так можно проверить sql запрос
//echo $query->toSQL(); 

// получаем данные
$result = $query->stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($result as $row) {
        echo $row['pagetitle'].' '.$row['username'];
    } 

} 

Функция getCollection()

$query = $modx->newQuery('modResource');

$query->select('id, pagetitle, createdon');
$query->sortby('createdon', 'DESC');
$query->limit(10);
$query->prepare();

// получаем коллекцию объектов
$result = $modx->getCollection('modResource', $query);

foreach ($result as $row) {
    
    // связь с таблицей users по алиасу CreatedBy
    $user =  $row->getOne('CreatedBy');
    // имя пользователя
    echo $user->get('username') ;
    // заголовок ресурса
    echo $row->get('pagetitle');
}

xPDOCriteria()

// пишем запрос
$sql = "SELECT `pagetitle`, `username` FROM `modx_site_content` AS `modResource` JOIN `modx_users` `key` ON `key`.`id` = `modResource`.`createdby` ORDER BY `modResource`.`createdon` DESC LIMIT 10"; 
// получаем объект
$query = new xPDOCriteria($modx, $sql);
if ($query->prepare() && $query->stmt->execute()){
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
        echo $row['username'];
        echo $row['pagetitle'];
    }
}

query()

$sql = "SELECT `pagetitle`, `username` FROM `modx_site_content` AS `modResource` JOIN `modx_users` `key` ON `key`.`id` = `modResource`.`createdby` ORDER BY `modResource`.`createdon` DESC LIMIT 10"; 

$query = $modx->query($sql);

$res = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
    echo $row['username'];
    echo $row['pagetitle'];
}

Примеры показывают, что одни и те же данные можно получить различными способами.

Работа с родительскими и дочерними элементами

Узнать цепочку из родителей нашего документа:

$parents = $modx->getParentIds(id_документа);

Он возвращает массив, состоящий из цепочки id найденных элементов. Более того, если читать между строк, то мы основываясь лишь на количестве элементов в данном массиве, сможем узнать на каком уровне находится наш документ.

Узнать цепочку из родителей нашего документа:

$childs = $modx->getChildIds(9,2,array('context' => 'web'));

А с помощью данного метода мы можем получить дочерние ресурсы, где:
9 - id ресурса,
2 - уровень вложенности. То есть глубина, на которой нужно будет искать ресурсы,
array('context' => 'web') - контекст выборки.

← Все разделы wiki

Контакты

Давайте обсудим задачу

Свяжитесь удобным способом — ответим и предложим формат работы.

Время работы

Пн–Пт 10:00–18:00
Сб–Вс Выходной
Обед 13:00–14:00

Почта и адрес

info@webstepup.ru
г. Волгодонск, ул. Степная 86, офис 11

Полный бриф

Обратный звонок