如果针对大量资源运行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

10-06 10:12