From 5dbe97630c4489a085664b390b7adcf0cfd6de32 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/src/User/Search/Gambit/FulltextGambit.php b/src/User/Search/Gambit/FulltextGambit.php index 01080a4f5..9cfe5ea20 100644 --- a/src/User/Search/Gambit/FulltextGambit.php +++ b/src/User/Search/Gambit/FulltextGambit.php @@ -28,15 +28,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)); } }