pdoFetch
Последнее обновление not available | История страницы | Улучшить эту страницу | Сообщить о проблеме
pdoFetch наследует pdoTools, поэтому загружайте один класс в зависимости от задачи. Загрузить каждый класс можно так:
$pdo = $modx->getService('pdoFetch');
И далее
$resources = $pdo->getCollection('modResource', array(
'published' => true,
'deleted' => false
), array(
'parents' => '1,5,6,-9',
'includeTVs' => 'tv1, tv2',
'sortby' => 'id',
'sortby' => 'asc',
'limit' => 20,
));
$tpl = '@INLINE <p>[[+id]] - [[+pagetitle]]</p>';
$output = '';
foreach ($resources as $resource) {
$output .= $pdo->getChunk($tpl, $resource);
}
return $output;
Вся логика pdoResources на самом деле внутри класса pdoFetch, и вы можете использовать её в своих сниппетах.
pdoFetch старается выполнять только один запрос за раз. Поэтому нужны join таблиц. Дополнительные запросы появляются только при выборке TV: нужны их имена и значения по умолчанию для корректного запроса.
TV тоже join-ятся как и другие таблицы, без дополнительных запросов за их значениями, в отличие от getResources.
Поэтому для фильтра по TV используйте запрос:
[[!pdoResources?
&parents=`0`
&includeTVs=`tv1`
&where=`{"tv1":"my_value"}`
]]
Значения TV по умолчанию не сохраняются в таблице, они только в настройках TV, поэтому сравнивайте их с null:
[[!pdoResources?
&parents=`0`
&includeTVs=`tv2`
&where=`{"tv2":null}`
]]
Если нужно выбрать ресурс, где tv2 имеет значение по умолчанию, выбирайте ресурсы с null для этой TV. Но pdoFetch вернёт значение по умолчанию TV как значение поля в результатах.
Надеюсь, логика pdoFetch стала понятнее. Итого:
- Один запрос, чтобы править всеми.
- С join таблиц, если нужно больше данных. Без дополнительных запросов!
- Чистые массивы в результатах, без объектов.
- Если включить
&checkPermissions, будут созданы минимальные объекты для вызоваcheckPolicy(). Это замедлит сниппет.
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
$204 per month—let's make that $500!
Learn more










