From de4dacd1da5546260a8f114578cb86dffb652a50 Mon Sep 17 00:00:00 2001 From: "Andrei V. Goryunov" Date: Mon, 19 Sep 2022 12:31:11 +0300 Subject: [PATCH] handle string filter (?filter=) --- src/Endpoint/Index.php | 4 ---- src/ResourceType.php | 7 ++++++- 2 files changed, 6 insertions(+), 5 deletions(-) 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));