/** * Display a listing of the resource. * * @param \Illuminate\Http\Request $request * * @return \Quoterr\Http\Controllers\Response */ public function index(Request $request) { $q = $request->get('q'); $tag = str_slug($q); $authors = Author::where('name', 'ilike', "%{$q}%")->take(20)->get(); $tags = Tag::where('name', 'ilike', "%{$tag}%")->take(20)->get(); $query = \DB::table(\DB::raw("quotes, to_tsvector(quotes.content) target, to_tsquery('english', ?) query"))->select(['quotes.*', \DB::raw('ts_rank_cd(target, query) as rank')])->setBindings([str_replace(' ', '|', $q)]); $quotes = Quote::query()->setQuery($query)->published()->whereRaw(\DB::raw('target @@ query'))->orderBy('rank', 'desc')->paginate(50); foreach ($quotes as $quote) { $quote->content = $this->highlight($quote->content, $q); } $quotes->load(['author']); $quotes->appends(\Input::except('page')); return view('quote.index', compact('authors', 'tags', 'quotes', 'q')); }