/** * Search records * * @param Request $request */ public function search(Request $request) { // input search fields $tagfield = $request->get('tagfield'); $tagsubfield = $request->get('tagsubfield'); $query = $request->get('expressao'); $arquivo = $request->get('arquivo'); // get the records $records = Record::whereHas('fields', function ($q) use($query, $tagfield, $tagsubfield) { $q->join('marcsubfields', 'records_fields.tagsubfield', '=', 'marcsubfields.id')->join('marcfields', 'marcsubfields.tagfield', '=', 'marcfields.id')->where('records_fields.value', '!=', '')->where('records_fields.value', 'LIKE', '%' . $query . '%'); if ($tagsubfield != '*') { $q->where('marcfields.tagfield', $tagfield)->where('marcsubfields.tagsubfield', $tagsubfield); } })->with(['fields' => function ($q) { $q->join('marcsubfields', 'records_fields.tagsubfield', '=', 'marcsubfields.id')->join('marcfields', 'records_fields.tagfield', '=', 'marcfields.id')->orderby('marcfields.id')->select('records_fields.value', 'marcsubfields.description', 'records_fields.record_id', 'records_fields.id', 'marcfields.tagfield', 'marcsubfields.tagsubfield'); }])->join('biblios', 'records.biblio', '=', 'biblios.id')->select('records.*', 'biblios.name'); if ($arquivo != '*') { $records = $records->where('biblio', '=', $arquivo); } $records = $records->get(); $total_num_records = count($records); $paginatedSearchResults = $this->paginateResults($records, Config::get('settings.search_items_per_page'), $request); $biblios = Biblio::All(); return view('results', compact('paginatedSearchResults', 'total_num_records', 'tagfield', 'tagsubfield', 'query', 'biblios', 'arquivo')); }