xPDO::getCollectionGraph

Пример вызова:

getCollectionGraph - получаем коллекцию указанного xPDOObjects следуя специфике xPDOCriteria. Если попытка закончилась неудачей, результатом будет пустой массив.

Получим обьекты Box связанные с BoxColors и цветом, с шириной 40.

<?php
    $boxes = $xpdo->getCollectionGraph('Box', '{"BoxColors":{"Color":{}}}', array('Box.width' => 40));
    foreach ($boxes as $box) {
        foreach ($box->getMany('BoxColors') as $boxColor) {
            echo "A box with width of 40 and a color of " . $boxColor->getOne('Color')->get('name') . " was found.\n";
        }
    }

Как правило вы будете использовать xPDO запросы в сниппетах. В данном примере мы достаем обьекты modResource в которых выставлен шаблон под id равному 3.

<?php
    $pages = $modx->getCollection('modResource', array('template' => 3));

Как посмотреть все обьекты?

Помните что вы должны использовать названия обьектов класса. Список всех названий обьектов класса можно посмотреть здесь core/model/schema/modx.mysql.schema.xml.

Описание метода:

array getCollectionGraph (string $className, array|str $graph, [xPDOCriteria|array|str|int $criteria = null], [bool|int $cacheFlag = true])

Помните, если вы используете xPDO карту и классы , которые были созданы на основе XML схемы, то имя класса не будет совпадать с именем таблицы. Если сомневаетесь, взгляните на схему XML файла.

<object class="MyClassName" table="my_class_name" extends="xPDOObject">

getCollectionGraph - удобен тем что не требуется использовать для подтягивания других таблиц getMany() или getOne().

Дебаг:

Есть пара моментов, в курсе которых вы должны быть если используете getCollectionGraph. Вы не можете использовать традиционные "prepare" и "toSQL". Расмотрим следующий код:

<?php
$criteria['modResource.id:IN'] = array(1,2,3);
$criteria['TemplateVarResources.tmplvarid'] = 5;
$criteria = $modx->newQuery('modResource', $criteria);
$criteria->prepare();
print $criteria->toSQL();
$pages = $modx->getCollectionGraph('modResource', '{"TemplateVarResources":{"TemplateVar":{}}}', $criteria);

Если вы попытаетесь выполнить toSQL() в данном примере, то запрос не будет выполнен.

xPDO::addPackage - подключает обьекты нужного пакета…
xPDO::commit - аналог функции php commit()
xPDO::beginTransaction - аналог функции php beginTransaction()
xPDO::connect - создает подключение к базе данных,…
xPDO::fromJSON - преобразует строку JSON в php…
xPDO::getCollection - получаем коллекцию указанного…
xPDO::getCollectionGraph - получаем коллекцию указанного…
xPDO::getObject - получаем один экземпляр обьекта…
xPDO::newQuery - создает новый xPDOQuery для выбранного…
xPDO::getObjectGraph - получает заданный обьект и все…
xPDO::getOption - получаем опцию обьекта по его…
xPDO::getTableName - получает фактическое имя таблицы…
xPDO::loadClass - подключаем выбранный класс.
xPDO::log - добавляем сообщение в лог.
xPDO::newObject - создаем новый обьект класса.
xPDO::newQuery - создаем новый обьект класса.
xPDO::query - выполняет SQL-запрос, и возвращает…
xPDO::setDebug - устанавливает отладчик для XPDO
xPDO::setLogLevel - устанавливает уровень логирования…
xPDO::setLogTarget - Устанавивает цель для xPDO::_log()…
xPDO::setOption - устанавливаем значение для конфигурации.
xPDO::toJSON - конвертирует PHP массив в JSON…