Jump to main content Jump to doc navigation

xPDO::getCollectionGraph

Извлекает коллекцию xPDOObjects и связанных объектов по указанномуxPDOCriteria.

Если ничего не найдено, возвращает пустой массив.

Синтаксис

API Docs: https://api.modx.com/revolution/2.2/db_core_xpdo_xpdo.class.html#\xPDO::getCollectionGraph()

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">

Пример

Получите коллекцию объектов Box со связанными объектами BoxColors и Color, где Box имеет ширину 40.

$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";
    }
}

Нет дополнительных запросов Основным преимуществом использования getCollectionGraph является получение данных из связанных таблиц в одном запросе. Никакие дополнительные запросы не выполняются, когда getMany() или getOne() вызываются для связанных объектов, которые уже загружены из $graph. Графики являются полезной альтернативой использованию соединений xPDO.

Отладка

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

$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);

Если вы посмотрите на запрос, то увидите, что в объекте $critree, который указывает JOIN, нет ничего присущего. Вы указываете столбцы в нескольких таблицах (modResource и TemplateVarResources), но если вы посмотрите на запрос при использовании метода toSQL(), вы обнаружите, что запрос не будет выполнен.

Объединение связанных таблиц происходит в этом случае, когда выполняется функция getCollectionGraph(), поэтому попытка распечатать SQL до этого момента не даст точного результата.

Смотрите также

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • Jens Wittmann – Gestaltung & Entwicklung
  • Digital Penguin
  • eydolan
  • deJaya
  • Sepia River Studios
  • Following Sea
  • Fabian Christen
  • Dannevang Digital
  • Anton Tarasov
  • Lefthandmedia
  • Murray Wood
  • Nick Clark
  • YJ
  • Chris Fickling
  • CrewMark
  • Richard

Budget

$269 per month—let's make that $500!

Learn more