xPDO.getIterator
Последнее обновление Apr 20th, 2021 | История страницы | Улучшить эту страницу | Сообщить о проблеме
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
Budget
$315 per month—let's make that $500!
Learn morexPDO::getIterator¶
Извлекает xPDOIterator
, представляющий итеративную коллекцию xPDOObjects
по указанному xPDOCriteria
.
Используйте xPDOIterator
для циклического перебора больших наборов результатов и работы с одним экземпляром за раз. Это значительно уменьшает использование памяти при одновременной загрузке всей коллекции объектов в память. Это также немного быстрее.
Синтаксис¶
API Docs: https://api.modx.com/revolution/2.2/db_core_xpdo_xpdo.class.html#\xPDO::getIterator()
xPDOIterator getIterator (string $className, [xPDOCriteria|array|str|int $criteria = null], [bool|int $cacheFlag = true])
Помните, что если вы используете карту xPDO и файлы классов, которые были сгенерированы из схемы XML, имя класса не совпадает с именем вашей таблицы. Если сомневаетесь, взгляните на XML-файл схемы, например,
<object class="MyClassName" table="my_class_name" extends="xPDOObject">
Пример¶
Получите итератор для коллекции объектов Box шириной 40.
$boxes = $xpdo->getIterator('Box',array(
'width' => 40,
));
foreach ($boxes as $idx => $box) {
echo "Box #{$idx} has an id of {$box->get('id')} and a width of {$box->get('width')}\n";
}
Если не найдено ни одного соответствующего xPDOObjects
, объект xPDOIterator
будет пустым, но все равно будет объектом, поэтому следующее не будет работать (в отличие от xPDO.getCollection):
// родитель -1 не существует, это преднамеренно =)
$resourceObjs = $xpdo->getIterator('modResource', array('parent' => -1));
if ($resourceObjs) { // то же самое касается if (!empty($resourceObjs)
// это всегда будет работать, так как $resourceObjs никогда не бывает пустым
// в том смысле, что мы интуитивно думаем о пустом
// $resourceObjs содержит пустой объект xPDOIterator, но это не пустой массив!
}
// если вам действительно нужно проверить, есть ли что-то для повторения, вы можете сделать либо:
if ($xpdo->getCount('modResource', array('parent' => -1))) {
// это не будет работать
}
// or
$resourceObjs->rewind();
if ($resourceObjs->valid()) {
// это не будет работать
}
Смотрите также¶
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
Budget
$315 per month—let's make that $500!
Learn more