Skip to content

Commit

Permalink
Merge pull request #32 from TomHAnderson/feature/simplify-apply-filters
Browse files Browse the repository at this point in the history
Feature/simplify apply filters
  • Loading branch information
TomHAnderson committed Dec 2, 2023
2 parents bd99e53 + 3bc35e1 commit 2df392c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 67 deletions.
81 changes: 15 additions & 66 deletions src/Criteria/Filters.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,62 +70,19 @@ public static function getDescriptions(): array
];
}

/** @param mixed[] $filterTypes */
public function filterQueryBuilder(array $filterTypes, QueryBuilder $queryBuilder): void
/**
* Add where clauses to a queryBuidler based on the FilterType of the entity
* The alias for the entity must be named `entity`
*
* @param mixed[] $filterTypes
*/
public function applyToQueryBuilder(array $filterTypes, QueryBuilder $queryBuilder): void
{
foreach ($filterTypes as $field => $filters) {
$entityField = 'entity.' . $field;

foreach ($filters as $filter => $value) {
switch ($filter) {
case self::EQ:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->eq($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::NEQ:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->neq($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::LT:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->lt($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::LTE:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->lte($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::GT:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->gt($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::GTE:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->gte($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::BETWEEN:
$from = 'p' . uniqid();
$to = 'p' . uniqid();
Expand Down Expand Up @@ -164,22 +121,6 @@ public function filterQueryBuilder(array $filterTypes, QueryBuilder $queryBuilde
->setParameter($parameter, '%' . $value);
break;

case self::IN:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->in($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::NOTIN:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->notIn($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;

case self::ISNULL:
if ($value === true) {
$queryBuilder->andWhere(
Expand All @@ -198,6 +139,14 @@ public function filterQueryBuilder(array $filterTypes, QueryBuilder $queryBuilde
case self::SORT:
$queryBuilder->addOrderBy($entityField, $value);
break;

default:
$parameter = 'p' . uniqid();
$queryBuilder->andWhere(
$queryBuilder->expr()->$filter($entityField, ':' . $parameter),
)
->setParameter($parameter, $value);
break;
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Resolve/ResolveEntityFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function get(Entity $entity, string $eventName): Closure
->from($entityClass, 'entity');

if (isset($args['filter'])) {
$filters->filterQueryBuilder($args['filter'], $queryBuilder);
$filters->applyToQueryBuilder($args['filter'], $queryBuilder);
}

return $this->buildPagination(
Expand Down

0 comments on commit 2df392c

Please sign in to comment.