input("q"); if ( isset($input) && "" != $input ){ return redirect()->route('cocktail_search', ['i[]' => $input ]); } if ( Cache::has('cocktail_count') ) { $cocktail_count= Cache::get('cocktail_count'); } else { $cocktails = new Cocktail; $cocktail_count = $cocktails->count(); Cache::put('cocktail_count', $cocktail_count, 6000); // 100 minutes } return view('cocktail_index', [ "cocktail_count" => $cocktail_count ]); } public function search(Request $request) { $ingredients = $request->input("i"); if ( ! isset($ingredients) || empty($ingredients) ) { $ingredients = array( $request->input("q") ); } $excludes = $request->input("i_ex"); if ( ! isset($excludes) || empty($excludes) ) { $excludes = array(""); } $cocktails = new Cocktail; foreach($ingredients as $q) { foreach($excludes as $ex) { $ex = Helper::escapeLike($ex); $ex = "%".$ex."%"; $cocktails = $cocktails->where(function($query) use ($q, $ex){ $query->whereHas("getIngredients", function ($query) use ($q){ if ( Str::contains($q, ' oder ') ) { $exploded = explode(' oder ', $q); $query->where( function ($query) use ($exploded){ foreach($exploded as $e) { $e = Helper::escapeLike($e); $e = "%".$e."%"; $query->orWhere('name', 'like', $e); } }); } else { $q = Helper::escapeLike($q); $q = "%".$q."%"; $query->where('name', 'like', $q); } }); if ( "%%" != $ex ) { $query->whereDoesntHave("getIngredients", function ($query) use ($ex){ $query->where('name', 'like', $ex); }); } }); } } foreach($ingredients as $key => $q) { if ( Str::contains($q, ' oder ') ) { unset($ingredients[$key]); $exploded = explode(' oder ', $q); foreach($exploded as $key => $val ) $exploded[$key] = trim($exploded[$key] ); $ingredients = array_merge($ingredients, $exploded); } } $count = $cocktails->count(); $search_phrase = ""; foreach(array_filter($ingredients) as $term) { if ( $search_phrase != "" ) if ( Str::contains( $request->fullUrl(), 'oder' ) ) $search_phrase = $search_phrase . " und/oder "; else $search_phrase = $search_phrase . " und "; $search_phrase = $search_phrase . ucwords($term); } #$search_phrase = rtrim($search_phrase, " und "); $exclude_phrase = ""; if ( isset($excludes) ) { foreach(array_filter($excludes) as $term) { if ( $exclude_phrase != "" ) $exclude_phrase = $exclude_phrase . " oder "; $exclude_phrase = $exclude_phrase . ucwords($term); } #$exclude_phrase = rtrim($exclude_phrase, " oder "); } if ( "" != $exclude_phrase) $search_phrase .= " und nicht nach " . $exclude_phrase; return view('cocktail_list', [ "cocktails" => $cocktails, "count" => $count, "search_terms" => array_filter($ingredients), "search_phrase" => $search_phrase, "exclude_terms" => array_filter($excludes) ]); } }