diff --git a/src/Engines/CollectionEngine.php b/src/Engines/CollectionEngine.php index a9c96f27..bd75cc83 100644 --- a/src/Engines/CollectionEngine.php +++ b/src/Engines/CollectionEngine.php @@ -85,14 +85,17 @@ public function paginate(Builder $builder, $perPage, $page) protected function searchModels(Builder $builder) { $query = $builder->model->query() - ->when(count($builder->wheres) > 0, function ($query) use ($builder) { + ->when(! is_null($builder->callback), function ($query) { + call_user_func($builder->callback, $query, $builder, $builder->query); + }) + ->when(! $builder->callback && count($builder->wheres) > 0, function ($query) use ($builder) { foreach ($builder->wheres as $key => $value) { if ($key !== '__soft_deleted') { $query->where($key, $value); } } }) - ->when(count($builder->whereIns) > 0, function ($query) use ($builder) { + ->when(! $builder->callback && count($builder->whereIns) > 0, function ($query) use ($builder) { foreach ($builder->whereIns as $key => $values) { $query->whereIn($key, $values); } diff --git a/tests/Feature/CollectionEngineTest.php b/tests/Feature/CollectionEngineTest.php index d4cfa2eb..fc411604 100644 --- a/tests/Feature/CollectionEngineTest.php +++ b/tests/Feature/CollectionEngineTest.php @@ -44,6 +44,13 @@ public function test_it_can_retrieve_results() $this->assertCount(1, $models); $this->assertEquals(1, $models[0]->id); + $models = SearchableUserModel::search('Taylor')->query(function ($query) { + $query->where('email', 'like', 'taylor@laravel.com'); + })->get(); + + $this->assertCount(1, $models); + $this->assertEquals(1, $models[0]->id); + $models = SearchableUserModel::search('Abigail')->where('email', 'abigail@laravel.com')->get(); $this->assertCount(1, $models); $this->assertEquals(2, $models[0]->id);