From 2682c573eb7598a2afa1fcb70af424bb4264588e Mon Sep 17 00:00:00 2001 From: Tariq Hussein Date: Wed, 2 Oct 2019 00:04:01 +0100 Subject: [PATCH] Fixes #1877 Replace getIdsForUsername() with subquery instead. (#1878) --- .../src/User/Search/Gambit/FulltextGambit.php | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/framework/core/src/User/Search/Gambit/FulltextGambit.php b/framework/core/src/User/Search/Gambit/FulltextGambit.php index a41821693..64b8fff3b 100644 --- a/framework/core/src/User/Search/Gambit/FulltextGambit.php +++ b/framework/core/src/User/Search/Gambit/FulltextGambit.php @@ -30,15 +30,25 @@ class FulltextGambit implements GambitInterface $this->users = $users; } + /** + * @param $searchValue + * @return \Illuminate\Database\Eloquent\Builder + */ + private function getUserSearchSubQuery($searchValue) + { + return $this->users + ->query() + ->select('id') + ->where('username', 'like', "{$searchValue}%"); + } + /** * {@inheritdoc} */ - public function apply(AbstractSearch $search, $bit) + public function apply(AbstractSearch $search, $searchValue) { - $users = $this->users->getIdsForUsername($bit, $search->getActor()); - - $search->getQuery()->whereIn('id', $users); - - $search->setDefaultSort(['id' => $users]); + $search->getQuery() + ->whereIn('id', + $this->getUserSearchSubQuery($searchValue)); } }