如果针对大量资源运行getChildIds可能会非常慢,因此我正在尝试编写查询和一些代码以更快地获取所有子ID。
但是我从getChildIds和我的脚本得到了不同的结果。
谁能看到这些为什么会产生不同的结果?
使用getChildIDs的方法:
$parentDepth = isset($scriptProperties['parentDepth']) ? $scriptProperties['parentDepth'] : 5;
$parents = explode(',', $parents);
$children = array();
foreach ($parents as $parent){
$ids = $modx->getChildIds($parent,10,array('context' => 'web'));
foreach($ids as $id){
$children[] = $id;
}
}
echo ' number of children = ' . count($children);
使用查询和循环的方法:
$comma_separated = implode(",", $parents);
$sql = "SELECT `id` from modx_site_content where `parent` IN (".$comma_separated.") and published = 1 and isfolder = 0 and deleted = 0 and hidemenu = 0;";
$results = $modx->query($sql);
$mychildren = array();
while ($row = $results->fetch(PDO::FETCH_ASSOC)) {
$mychildren[] = $row['id'];
}
for($i=0; $i <= 10; $i++){
$comma_separated = implode(",", $mychildren);
$sql = "SELECT `id` from modx_site_content where `parent` IN (".$comma_separated.") and published = 1 and isfolder = 0 and deleted = 0 and hidemenu = 0;";
$results = $modx->query($sql);
while ($row = $results->fetch(PDO::FETCH_ASSOC)) {
$mychildren[] = $row['id'];
}
}
echo ' number of children = ' . count($mychildren);
getChildIDs方法需要将近1.5秒的时间来运行,并给出大约1100个结果
SQL / script方法在0.1秒内运行,并给出1700个结果。
我是否没有将孩子ID正确地附加到数组上?或者〜也许getChildIDs正在过滤掉其他结果?
有没有人对这里可能发生的事情有任何线索?
最佳答案
您可以尝试使用built-in method of pdoFetch。
$pdo = $modx->getService('pdoFetch');
$ids = $pdo->getChildIds('modResource', 0);
print_r($ids);
它也是递归的,但在某些情况下可能会更好。
当然,您需要首先从存储库中install pdoTools。