Пример вызова:
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() в данном примере, то запрос не будет выполнен.