Ага, и перетерли массив объектов $this->_relatedObjects[$alias] новым массивом массивов. Вы слышали про ссылки на объекты? Вот такой пример рассмотрим:
<?php $a = $modx->getCollection('modResource', 3); $b = $modx->getCollection('modResource', 3); $obj = $a[3]; print ($a[3] === $obj ? 1: 0); // result 1 $obj = $b[3]; print ($a[3] === $obj ? 1: 0); // result 0
Хотя это вроде одинаковые объекты с одинаковыми данными, он не равны друг другу, так как это разные инстансы (если жестко сравнивать). А вы предлагаете этот массив затирать.
Конечно, может ваш метод и рабочий, может даже сбоев не будет, но он может содержать много подводных камней. Метод перебора foreach и присвоение по id дает четкое понимание что и как происходит, и не заставит программиста лезть в мануалы изучать специфики редко используемых функций.