<?php declare(strict_types=1); namespace IQDEV\Packages\DoctrineHttpFilter; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\QueryBuilder; use Symfony\Component\HttpFoundation\Request; abstract class HttpFilterEntityRepository extends EntityRepository implements QueryFilterInterface { /** @inheritDoc */ public function createQueryByFilter(iterable $filters, ?Request $request = null): QueryBuilder { $tableAlias = $this->getAliasTableForFilter(); $queryBuilder = $this->createQueryBuilder($tableAlias); /** * @var string $field * @var string|HttpFilter $filter */ foreach ($filters as $field => $filter) { if (! $filter instanceof HttpFilter && is_string($filter)) { $filter = new $filter($tableAlias, $field, $request); } $filter->addToQuery($queryBuilder); } return $queryBuilder; } abstract public function getAliasTableForFilter(): string; }