get('type'); $value = $request->get('value'); $search = $request->get('search'); $video_recipe = $request->get('video_recipe'); // @phpcs:disable PSR2.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace if ( !session()->has('recipes.rand') || (intval(session()->get('recipes.time', time())) - intval(time())) > (60 * 60 * 60) // 1 hour ) { session()->put('recipes.time', time()); session()->put('recipes.rand', Recipes::all('id')->shuffle()->map(function ($obj) { return $obj->id; })->toArray()); session()->save(); } $recipes = Recipes::select('title', 'slug', 'picture', 'catch_phrase') ->where('status', true) ->orderByRaw(\sprintf('FIELD(id, %s)', implode(", ", session()->get('recipes.rand')))); if ($search) { $recipes = $recipes->where('title', 'like', '%' . implode('%', explode(' ', trim($search))) . '%'); } if ($video_recipe) { $recipes = $recipes->where('type', '=', RecipeType::video()->value); } $ranges = Ranges::select('name', 'slug') ->where('status', true) ->orderBy('order') ->get(); $consumptionTimes = ConsumptionTimes::select('name', 'slug') ->where('status', true) ->get(); try { switch ($type) { case 'range': $recipes = $recipes->whereHas('products.range', function ($q) use ($value) { $q->where('ranges.slug', $value); }); break; case 'consumption': $recipes = $recipes->whereHas('consumptionTimes', function ($q) use ($value) { $q->where('consumption_times.slug', $value); }); break; case 'preparation': switch ($value) { case 'less15': $recipes = $recipes->where('preparation_time', '<=', 15); break; case '15and30': $recipes = $recipes ->where('preparation_time', '>=', 15) ->where('preparation_time', '<=', 30); break; default: case 'more30': $recipes = $recipes ->where('preparation_time', '>', 30); break; } break; case 'cooking': switch ($value) { case 'less15': $recipes = $recipes->where('cooking_time', '<=', 15); break; case '15and30': $recipes = $recipes ->where('cooking_time', '>=', 15) ->where('cooking_time', '<=', 30); break; default: case 'more30': $recipes = $recipes ->where('cooking_time', '>', 30); break; } break; } } catch (ModelNotFoundException $e) { } $recipes = $recipes->paginate(); return view('front.recipes.index', compact( 'recipes', 'ranges', 'consumptionTimes', 'type', 'value' )); } public function show(Recipes $recipe) { $recipe->load('products', 'articles'); return view('front.recipes.show', compact('recipe')); } }