diff --git a/src/Concerns/FiltersQuery.php b/src/Concerns/FiltersQuery.php index 9e932c23..8407cb29 100644 --- a/src/Concerns/FiltersQuery.php +++ b/src/Concerns/FiltersQuery.php @@ -14,7 +14,7 @@ public function allowedFilters($filters): static { $filters = is_array($filters) ? $filters : func_get_args(); - $this->allowedFilters = collect($filters)->map(function ($filter) { + $this->allowedFilters = collect($filters)->flatten(1)->map(function ($filter) { if ($filter instanceof AllowedFilter) { return $filter; } diff --git a/tests/FilterTest.php b/tests/FilterTest.php index 75d5042a..e7e28c6c 100644 --- a/tests/FilterTest.php +++ b/tests/FilterTest.php @@ -479,6 +479,20 @@ public function __invoke(Builder $query, $value, string $property): Builder expect($results->pluck('id')->all())->toEqual([$model1->id, $model2->id]); }); +it('can allow multiple filters as nested array', function () { + $model1 = TestModel::create(['name' => 'abcdef']); + $model2 = TestModel::create(['name' => 'abcdef']); + + $results = createQueryFromFilterRequest([ + 'name' => 'abc', + ]) + ->allowedFilters([['name'], [AllowedFilter::exact('id')]]) + ->get(); + + expect($results)->toHaveCount(2); + expect($results->pluck('id')->all())->toEqual([$model1->id, $model2->id]); +}); + it('can filter by multiple filters', function () { $model1 = TestModel::create(['name' => 'abcdef']); $model2 = TestModel::create(['name' => 'abcdef']);