Проблема с фильтрацией данных перед отправкой на view

Я пытаюсь отфильтровать данные перед отправкой на вьюху через DB::raw но вылетает ошибка (Call to a member function orderBy() on array) в этом месте

 if ($request->input('order') == 'complexity asc') {
$recipesQuery->orderBy('difficulty', 'asc');
}

Вот полный кусок кода

public function index(Request $request) {
        $recipesQuery = Recipe::query();
        $ingredients = DB::table('ingredients')->get();

        if($request->input('ingredients')){
            $all = $request->input('ingredients');
            $rest = $request->input('ingredients');
            $first = array_shift($rest);
            $tmp = "";
            foreach ($rest as $value) {
                $tmp = $tmp . "OR  ingredient_id = " . $value . " ";
            };
            if (count($all) == 1) {
                $recipesQuery =  DB::select(DB::raw("SELECT   r.name,
                                                    r.preparing,
                                                    r.difficulty
                                                    FROM recipes r
                                                    WHERE EXISTS (SELECT recipe_id FROM recipeingredients ri 
                                                                WHERE r.id = ri.recipe_id 
                                                                AND ingredient_id = '$first')"
                                            ),
                                            array('first' => $first)
                            );        
                        } else {
                $recipesQuery =  DB::select(DB::raw("SELECT   r.name,
                                                    r.preparing,
                                                    r.difficulty
                                                    FROM recipes r
                                                    WHERE EXISTS (SELECT recipe_id FROM recipeingredients ri 
                                                                WHERE r.id = ri.recipe_id 
                                                                AND ingredient_id = '$first'" . $tmp . ")"
                                            ),
                                            array('first' => $first)
                                            );
            }
        }

        if ($request->filled('order')) {
            if ($request->input('order') == 'complexity asc') {
                $recipesQuery->orderBy('difficulty', 'asc');
            } elseif ($request->input('order') == 'complexity desc') {
                $recipesQuery->orderBy('difficulty', 'desc');
            } elseif ($request->input('order') == 'preparing asc') {
                $recipesQuery->orderBy('preparing', 'asc');
            } elseif ($request->input('order') == 'preparing desc') {
                $recipesQuery->orderBy('preparing', 'desc');
            } elseif ($request->input('order') == 'date desc') {
                $recipesQuery->orderBy('preparing', 'desc');
            } elseif ($request->input('order') == 'date asc') {
                $recipesQuery->orderBy('preparing', 'asc');
            }
        }

        $recipe = $recipesQuery->paginate(3);
        
        return view('index', ['data' => $ingredients, 'recipes' => $recipe]);
    }

Мне кажется что нужно заменить выражение с raw на eloquent и это должно заработать,я попробовал и вот что получилось

DB::table('recipes')
                        ->select('recipes.name', 'recipes.preparing', 'recipes.difficulty')
                        ->whereExists(function ($query) use($first, $rest) {
                            $query->select(DB::raw(1))
                                    ->from('recipeingredients')
                                    ->whereRaw('recipes.id = recipeingredients.recipe_id')
                                    ->whereRaw('recipeingredients.ingredient_id = ?', array($first));
                        })
                        ->groupBy('name', 'preparing', 'difficulty')
                        ->get();

Только остается вопрос как заставить это работать с несколькими айдишниками, чтобы они подставлялись в формате

$tmp = "";
            foreach ($rest as $value) {
                $tmp = $tmp . "OR  ingredient_id = " . $value . " ";
            };

Ответы (0 шт):