public static function hasOrderByOnToManyJoin(QueryBuilder $queryBuilder, ManagerRegistry $managerRegistry) : bool
{
if (empty($orderByParts = $queryBuilder->getDQLPart('orderBy')) || empty($joinParts = $queryBuilder->getDQLPart('join'))) {
return false;
}
$orderByAliases = [];
foreach ($orderByParts as $orderBy) {
$parts = QueryJoinParser::getOrderByParts($orderBy);
foreach ($parts as $part) {
if (false !== ($pos = strpos($part, '.'))) {
$alias = substr($part, 0, $pos);
$orderByAliases[$alias] = true;
}
}
}
if (!empty($orderByAliases)) {
foreach ($joinParts as $joins) {
foreach ($joins as $join) {
$alias = QueryJoinParser::getJoinAlias($join);
if (isset($orderByAliases[$alias])) {
$relationship = QueryJoinParser::getJoinRelationship($join);
list($parentAlias, $association) = explode('.', $relationship);
$parentMetadata = QueryJoinParser::getClassMetadataFromJoinAlias($parentAlias, $queryBuilder, $managerRegistry);
if ($parentMetadata->isCollectionValuedAssociation($association)) {
return true;
}
}
}
}
}
return false;
}