From 896a58d4f08c73da37a0af88c9c3945f254b53b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Sala=20Morral?= Date: Thu, 8 Apr 2021 15:14:51 +0200 Subject: [PATCH 1/2] Search inside hasMany relations is scoped to the parent id --- src/Controllers/ThrustHasManyController.php | 9 +++++++++ src/ResourceFilters/Search.php | 8 ++++---- src/resources/views/components/searchScript.blade.php | 2 +- src/routes.php | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Controllers/ThrustHasManyController.php b/src/Controllers/ThrustHasManyController.php index 4d82aa8b..ca522499 100644 --- a/src/Controllers/ThrustHasManyController.php +++ b/src/Controllers/ThrustHasManyController.php @@ -5,6 +5,7 @@ use Illuminate\Routing\Controller; use BadChoice\Thrust\Facades\Thrust; use BadChoice\Thrust\ChildResource; +use BadChoice\Thrust\Html\Index; class ThrustHasManyController extends Controller { @@ -24,10 +25,18 @@ public function index($resourceName, $id, $relationship) 'parent_id' => $id, 'isChild' => $resource instanceof ChildResource && $backHasManyURLParams, 'hasManyBackUrlParams' => $backHasManyURLParams, + 'searchUrl' => "/thrust/{$hasManyField->resourceName}/hasMany/{$id}/search/" // "object" => $object, // "title" => $object->{$resource->nameField}, // "children" => $object->{$relationship}, // "belongsToManyField" => $hasManyField, ]); } + + public function search($resourceName, $id, $searchText) + { + request()->merge(['search' => $searchText]); + $resource = Thrust::make($resourceName)->parentId($id); + return (new Index($resource))->show(); + } } diff --git a/src/ResourceFilters/Search.php b/src/ResourceFilters/Search.php index 32b16cda..b746ee82 100644 --- a/src/ResourceFilters/Search.php +++ b/src/ResourceFilters/Search.php @@ -8,11 +8,11 @@ class Search { public static function apply($query, $searchText, $searchFields) { - $searchFields = collect($searchFields); - $firstField = $searchFields->shift(); - static::applyField($query, $firstField, $searchText); + return $query->where(function ($query) use($searchText, $searchFields){ + $searchFields = collect($searchFields); + $firstField = $searchFields->shift(); + static::applyField($query, $firstField, $searchText); - return $query->orWhere(function ($query) use($searchText, $searchFields){ return $searchFields->reduce(function($query, $searchField) use($searchText) { return static::applyFieldSimple($query, $searchField, $searchText); }, $query); diff --git a/src/resources/views/components/searchScript.blade.php b/src/resources/views/components/searchScript.blade.php index db1c1181..ce3fa70e 100644 --- a/src/resources/views/components/searchScript.blade.php +++ b/src/resources/views/components/searchScript.blade.php @@ -1,5 +1,5 @@