diff --git a/src/SearchRequest/Attribute/SearchLike.php b/src/SearchRequest/Attribute/SearchLike.php index 13dac5b..459ed9e 100644 --- a/src/SearchRequest/Attribute/SearchLike.php +++ b/src/SearchRequest/Attribute/SearchLike.php @@ -8,7 +8,7 @@ use Ulmus\SearchRequest\SearchMethodEnum; class SearchLike extends SearchParameter { public function __construct( - public ? string $parameter = null, + public null|string|array $parameter = null, public null|string|\Stringable|array $field = null, public bool $toggle = false, public SearchMethodEnum $method = SearchMethodEnum::Like, diff --git a/src/SearchRequest/Attribute/SearchOrderBy.php b/src/SearchRequest/Attribute/SearchOrderBy.php index 171eba5..c23866f 100644 --- a/src/SearchRequest/Attribute/SearchOrderBy.php +++ b/src/SearchRequest/Attribute/SearchOrderBy.php @@ -12,7 +12,7 @@ class SearchOrderBy extends SearchParameter public const DESCENDING = "DESC"; public function __construct( - public ? string $parameter = null, + public null|string|array $parameter = null, public null|string|\Stringable|array $field = null, public null|SearchMethodEnum $order = null, public string $description = "", diff --git a/src/SearchRequest/Attribute/SearchParameter.php b/src/SearchRequest/Attribute/SearchParameter.php index 45eabf1..ebcf943 100644 --- a/src/SearchRequest/Attribute/SearchParameter.php +++ b/src/SearchRequest/Attribute/SearchParameter.php @@ -17,4 +17,9 @@ abstract class SearchParameter { { return is_array($this->source) ? $this->source : [ $this->source ]; } + + public function getParameters() : array + { + return array_filter((array) $this->parameter); + } } \ No newline at end of file diff --git a/src/SearchRequest/Attribute/SearchWhere.php b/src/SearchRequest/Attribute/SearchWhere.php index b14a83e..b5570e2 100644 --- a/src/SearchRequest/Attribute/SearchWhere.php +++ b/src/SearchRequest/Attribute/SearchWhere.php @@ -8,7 +8,7 @@ use Ulmus\SearchRequest\SearchMethodEnum; class SearchWhere extends SearchParameter { public function __construct( - public ? string $parameter = null, + public null|string|array $parameter = null, public null|string|\Stringable|array $field = null, public bool $toggle = false, public SearchMethodEnum $method = SearchMethodEnum::Where, diff --git a/src/SearchRequest/SearchRequestFromRequestTrait.php b/src/SearchRequest/SearchRequestFromRequestTrait.php index 457f324..c74e383 100644 --- a/src/SearchRequest/SearchRequestFromRequestTrait.php +++ b/src/SearchRequest/SearchRequestFromRequestTrait.php @@ -93,24 +93,28 @@ trait SearchRequestFromRequestTrait protected function getValueFromSource(RequestInterface $request, string $propertyName, SearchParameter $attribute) : mixed { - $queryParamName = $attribute->parameter ?? $propertyName; + $queryParamName = $attribute->getParameters() ?? [ $propertyName ]; foreach($attribute->getSources() as $source) { switch($source) { case PropertyValueSource::QueryParams: $queryParams = new \ArrayObject(array_filter($request->getQueryParams(), function($i) { return ! is_null($i) && $i !== ""; })); - if ($queryParams->offsetExists($queryParamName)) { - return $queryParams[$queryParamName]; + foreach($queryParamName as $param) { + if ($queryParams->offsetExists($param)) { + return $queryParams[$param]; + } } break; case PropertyValueSource::RequestAttribute: - $fromAttribute = $request->getAttribute($queryParamName, null); + foreach($queryParamName as $param) { + $fromAttribute = $request->getAttribute($param, null); - if ($fromAttribute !== null) { - return $fromAttribute; + if ($fromAttribute !== null) { + return $fromAttribute; + } } break;