I dont't really like the idea of doing basic sorting inside the view (mvc).
The Downside of most Database abstraction Layers ist, that you are quite often restricted to either mixup mvc or have a (sometimes slightly) lower performance.
I am at the same point right now. I am thinking about retrieving the parents (with their children attached). Then go into every single parent and get children for this parent in a sorted way.
public function findAllSorted() {
$query = $this->createQuery();
/* sort parents */
$query->setOrderings(array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
$parents = $query->execute();
foreach($parents as $parent){
/* get children for every parent */
$children = $this->getChildrenSorted($parent);
// add children to parent TBD
}
/* Debug output */
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($parents);
}
public function getChildrenSorted(\mynamespace\ $parent) {
/* Generate an object manager and use dependency injection to retrieve children repository */
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager');
$childrenRepository= $objectManager->get('MYNAME\Extname\Domain\Repository\Repository');
$children = $versionRepository->findSortedByName($parent);
return $children;
}
The function findSortedByName
inside the children repos is using
$query->matching($query->equals('parent', $parent));
to retrieve only children of this parent and
$query->setOrderings(array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
to be able to give them back in an ordered way.
Warning: Depending on the size and quantity of all retrieved objects, this way might arise a huge performance issue.