Goal: Create a query that will get me recipes that match the specified parameters from selectors:
- Dish Category
- Dish Subcategory
- Cuisine
- Меню
Код: Выделить всё
http://127.0.0.1:8000/recipes?dish_category=2&dish_subcategory=37&cuisine=1&menu=1< /code> < /p>
[b] Проблема: < /strong> < /p>
[*] Я заметил, что все еще могу удалить идентификатор категории в URL и оставить только подкатегорию:
http://127.0.0.1:8000/recipes?dish_category=&dish_subcategory=37&cuisine=1&menu=1
Как достичь поведения, когда пользователь может только вводить, например, «кухня» в селектор, а запрос выбирает рецепты, которые соответствуют только этому параметру? Он показывает мне правильные данные, но я не уверен, что это правильный способ фильтрации данных с использованием параметров URL: < /p>
Код: Выделить всё
$recipes = Recipe::with('user', 'cuisine')
->where('dish_category_id', $request->query('dish_category'))
->orWhere('dish_subcategory_id', $request->query('dish_subcategory'))
->orWhere('cuisine_id', $request->query('cuisine'))
->orWhere('menu_id', $request->query('menu'))
->get();
dd($recipes);
Код: Выделить всё
Illuminate\Database\Eloquent\Collection {#1085 ▼ // app\Http\Controllers\RecipeController.php:26
#items: array:2 [▼
0 =>
App\Models
\
Recipe {#1116 ▶}
1 =>
App\Models
\
Recipe {#1082 ▶}
]
#escapeWhenCastingToString: false
}
Заключение: [/b] Именно на это не нужно, но я также нуждаюсь в том, чтобы я также не нуждался в том, чтобы я также не нуждался в том, чтобы быть и для написания, но не так, как это нужно, но не так и для работы. Проблемы , описанный выше
, были бы благодарны за советы и помощь.
Редактировать 01:
Я пытался подходить к When () method:
Код: Выделить всё
$recipes = DB::table('recipes')
->when($dish_category, function ($query, $dish_category){
$query->where('dish_category_id', $dish_category);
})
->when($dish_subcategory, function ($query, $dish_subcategory){
$query->where('dish_subcategory_id', $dish_subcategory);
})
->when($cuisine, function ($query, $cuisine){
$query->where('cuisine_id', $cuisine);
})
->when($menu, function ($query, $menu){
$query->where('menu_id', $menu);
})
->get();
Подробнее здесь: https://stackoverflow.com/questions/795 ... rs-may-not