From 2b6ea3c34e9b5f61dd00b1d5c7a4e18e7a9d526f Mon Sep 17 00:00:00 2001 From: kdevan Date: Tue, 19 Oct 2021 15:21:07 -0700 Subject: [PATCH 1/2] Add builder as a parameter for search callback If a callback is used when searching (ex: Model::search('term', function (...args) { closure })) there is an error, "Too few arguments to function {closure}(), 3 passed and exactly 4 expected". $builder->callback is the closure itself. Next it is expecting the builder but is receiving $documents. --- src/Engines/TypesenseSearchEngine.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Engines/TypesenseSearchEngine.php b/src/Engines/TypesenseSearchEngine.php index ebd2637..7a7f437 100644 --- a/src/Engines/TypesenseSearchEngine.php +++ b/src/Engines/TypesenseSearchEngine.php @@ -223,7 +223,7 @@ protected function performSearch(Builder $builder, array $options = []): mixed $documents = $this->typesense->getCollectionIndex($builder->model) ->getDocuments(); if ($builder->callback) { - return call_user_func($builder->callback, $documents, $builder->query, $options); + return call_user_func($builder->callback, $builder, $documents, $builder->query, $options); } return $documents->search($options); From b62e3380cb9c417d3810b21f0b0e68f72355103b Mon Sep 17 00:00:00 2001 From: kdevan Date: Tue, 19 Oct 2021 15:35:10 -0700 Subject: [PATCH 2/2] Add default for Builder limit If the limit is not explicitly set on the Builder then we get the error, "Devloops\LaravelTypesense\Engines\TypesenseSearchEngine::buildSearchParams(): Argument #3 ($perPage) must be of type int, null given". Here's a fix that works but I'd understand if you have another way that works. I hardcoded the limit to 10 because that's the Typesense default for the per_page argument: https://typesense.org/docs/0.21.0/api/documents.html#arguments. --- src/Engines/TypesenseSearchEngine.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Engines/TypesenseSearchEngine.php b/src/Engines/TypesenseSearchEngine.php index 7a7f437..8ce0c83 100644 --- a/src/Engines/TypesenseSearchEngine.php +++ b/src/Engines/TypesenseSearchEngine.php @@ -132,17 +132,17 @@ public function paginate(Builder $builder, $perPage, $page): mixed /** * @param \Laravel\Scout\Builder $builder * @param int $page - * @param int $perPage + * @param int|null $perPage * * @return array */ - private function buildSearchParams(Builder $builder, int $page, int $perPage): array + private function buildSearchParams(Builder $builder, int $page, ?int $perPage): array { $params = [ 'q' => $builder->query, 'query_by' => implode(',', $builder->model->typesenseQueryBy()), 'filter_by' => $this->filters($builder), - 'per_page' => $perPage, + 'per_page' => $perPage ?? 10, 'page' => $page, 'highlight_start_tag' => $this->startTag, 'highlight_end_tag' => $this->endTag,