Skip to content

Commit

Permalink
[Event] add additional order by unique column - id
Browse files Browse the repository at this point in the history
  • Loading branch information
ottaviano committed May 22, 2024
1 parent 15d00eb commit 1a77e84
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
3 changes: 3 additions & 0 deletions config/services/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@
<service id="App\Api\Doctrine\EventExtension">
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="9" />
</service>
<service id="App\Api\Doctrine\EventOrderExtension">
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-35" />
</service>
<service id="App\Api\Doctrine\GeoZoneExtension">
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="9" />
</service>
Expand Down
32 changes: 32 additions & 0 deletions src/Api/Doctrine/EventOrderExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace App\Api\Doctrine;

use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use ApiPlatform\Metadata\Operation;
use App\Entity\Event\BaseEvent;
use Doctrine\ORM\QueryBuilder;

class EventOrderExtension implements QueryCollectionExtensionInterface
{
public function applyToCollection(
QueryBuilder $queryBuilder,
QueryNameGeneratorInterface $queryNameGenerator,
string $resourceClass,
?Operation $operation = null,
array $context = []
): void {
if (!is_a($resourceClass, BaseEvent::class, true)) {
return;
}

$alias = $queryBuilder->getRootAliases()[0];

/* Apply additional sorting by unique column (ID) to avoid issue with duplicated
* rows between two pages when ordering by a non-unique column (ex.: date). */
if ($queryBuilder->getDQLPart('orderBy')) {
$queryBuilder->addOrderBy($alias.'.id', 'DESC');
}
}
}

0 comments on commit 1a77e84

Please sign in to comment.