<?php
namespace App\ApiPlatform\Extension;
use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
use ApiPlatform\Metadata\Operation;
use App\Entity\Compliance;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Security\Core\Security;
final class ComplianceExtension implements QueryCollectionExtensionInterface
{
public function __construct(private Security $security)
{
}
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, Operation $operation = null, array $context = []): void
{
$site = @$context['filters']['evaluations.site'];
$document = @$context['filters']['evaluations.document'];
if ((Compliance::class != $resourceClass) || !$site) {
return;
}
$rootAlias = $queryBuilder->getRootAliases()[0];
$queryBuilder
->leftJoin($rootAlias . '.evaluations', 'e', 'with', 'e.site = :site and e.document = :document')
->setParameter('site', $site)
->setParameter('document', $document);
}
}