diff --git a/src/Endpoint/Index.php b/src/Endpoint/Index.php index bd7c210..8f41e63 100644 --- a/src/Endpoint/Index.php +++ b/src/Endpoint/Index.php @@ -62,10 +62,6 @@ class Index } if ($filter = $context->getRequest()->getQueryParams()['filter'] ?? null) { - if (! is_array($filter)) { - throw (new BadRequestException('filter must be an array'))->setSourceParameter('filter'); - } - $resourceType->applyFilters($query, $filter, $context); } diff --git a/src/ResourceType.php b/src/ResourceType.php index ffe5315..6ddc8f5 100644 --- a/src/ResourceType.php +++ b/src/ResourceType.php @@ -110,12 +110,17 @@ final class ResourceType /** * Apply the resource type's filters to a query. */ - public function applyFilters($query, array $filters, Context $context): void + public function applyFilters($query, $filters, Context $context): void { $schema = $this->getSchema(); $customFilters = $schema->getFilters(); $fields = $schema->getFields(); + if (is_string($filters)) { + $this->adapter->filterByExpression($query, $filters); + return; + } + foreach ($filters as $name => $value) { if ($name === 'id') { $this->adapter->filterByIds($query, explode(',', $value));