Laravel - получить все предметы в родительской категории - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть следующая таблица, которая называется recipe_subcategories:

enter image description here

каждому рецепту можно назначить одну родительскую категорию и несколько подкатегорий.

В настоящее время у меня есть следующий код для получения всех рецептов в родительской категории:

public function recipes(Request $request) {
        $id = explode('-', $request->idName)[0];
        return Category::where('id',$id)->first()->recipes;
    }

Проблема заключается в том, что если один и тот же рецепт принадлежит разным подкатегориям в одной и той же родительской категории,он вернет его несколько раз.

Каково идеальное решение для этой проблемы?Цель состоит в том, чтобы вернуть все рецепты в пределах одной родительской категории (category_id) без дубликатов.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете попробовать:

$category = Category::find('id', $categoryId);

$recipes = $category->recipes->unique('category_id');

Примечание. При этом будут получены все рецепты, а затем произведена фильтрация на уровне сбора, а не на уровне запроса к БД.

0 голосов
/ 21 февраля 2019

Вы можете начать с сводной таблицы следующим образом:

public function recipes(Request $request)
{
    $categoryId = explode('-', $request->idName)[0];

    $recipeIds = DB::table('recipe_subcategories')
        ->where('category_id', $categoryId)
        ->groupBy('recipe_id')
        ->pluck('recipe_id');

    return Recipe::whereIn('id', $recipeIds)
        ->get();
}

Я не уверен, как объединить их в один запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...