diff --git a/src/Traits/Filterable.php b/src/Traits/Filterable.php index e6a14d0..f28a58f 100644 --- a/src/Traits/Filterable.php +++ b/src/Traits/Filterable.php @@ -120,7 +120,7 @@ public function getField(string $field): string */ public function availableFields(): array { - if (!isset($this->filterFields)) { + if (!isset($this->filterFields) && !isset($this->renamedFilterFields)) { return array_merge($this->getTableColumns(), $this->relations()); } @@ -138,6 +138,10 @@ public function getUserDefinedFilterFields(): array return $this->userDefinedFilterFields; } + if (isset($this->renamedFilterFields)) { + return $this->userDefinedFilterFields = $this->renamedFilterFields; + } + $userDefinedFilterFields = []; foreach ($this->filterFields as $key => $value) { diff --git a/tests/Feature/RenameFilterableFieldsTest.php b/tests/Feature/RenameFilterableFieldsTest.php index 82aaf80..d68a109 100644 --- a/tests/Feature/RenameFilterableFieldsTest.php +++ b/tests/Feature/RenameFilterableFieldsTest.php @@ -89,4 +89,27 @@ public function it_can_overwrite_rename_filter_fields_in_eloquent_builder(): voi // It returns o records as builder level filters take priority $response->assertJsonCount(1); } + + /** @test */ + public function rename_filter_fields_works_when_filter_fields_not_set(): void + { + $post = new Post(); + $post->renamedFilterFields = ['invalid_column' => 'post_title']; // invalid column name + + $post->create([ + 'title' => 'title_1', + ])->create([ + 'title' => 'title_2', + ]); + + Route::get('/posts', function () use ($post) { + // reset with valid column name + return $post->renamedFilterFields(['title' => 'post_title'])->filter()->get(); + }); + + $response = $this->getJson('/posts?filters[post_title][$eq]=title_1'); + + $response->assertOk(); + $response->assertJsonCount(1); + } }