resetPage(); } public function updatingTld(): void { $this->resetPage(); } public function render(): View { $keyword = trim($this->keyword); $tld = strtolower(trim(ltrim($this->tld, '.'))); $hasQuery = $keyword !== '' || $tld !== ''; // Without any filter this would just be the full site list — that's what the // Sites page is for. Discover only returns results once you've asked it something. if (! $hasQuery) { $sites = new LengthAwarePaginator([], 0, 25, 1, ['path' => request()->url()]); } else { $sites = Site::query() ->when( $keyword !== '', fn ($query) => $query->whereHas( 'pages', fn ($pageQuery) => $pageQuery->whereFullText(['title', 'description', 'keywords', 'content'], $keyword) ) ) ->when($tld !== '', fn ($query) => $query->where('domain', 'like', '%.'.$tld)) ->withCount(['pages as matching_pages_count' => function ($pageQuery) use ($keyword) { if ($keyword !== '') { $pageQuery->whereFullText(['title', 'description', 'keywords', 'content'], $keyword); } }]) ->orderByDesc('matching_pages_count') ->orderBy('domain') ->paginate(25); } return view('livewire.discover.search', ['sites' => $sites, 'hasQuery' => $hasQuery]); } }