Laravel-获取父类别中的所有项目

Laravel-获取父类别中的所有项目,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我有下表,称为recipe\u子类别: 每个配方可分配给一个父类别和多个子类别 目前,我有以下代码来获取父类别中的所有配方: public function recipes(Request $request) { $id = explode('-', $request->idName)[0]; return Category::where('id',$id)->first()->recipes; } 问题是,如果同一配方属于同一父类别

我有下表,称为
recipe\u子类别

每个配方可分配给一个父类别和多个子类别

目前,我有以下代码来获取父类别中的所有配方:

public function recipes(Request $request) {
        $id = explode('-', $request->idName)[0];
        return Category::where('id',$id)->first()->recipes;
    }
问题是,如果同一配方属于同一父类别中的不同子类别,它将多次返回该配方


这个问题的理想解决方案是什么?目标是返回一个父类别(category_id)内的所有配方,且不重复。

您可以从pivot表开始,如下所示:

公共功能配方(请求$Request)
{
$categoryId=explode('-',$request->idName)[0];
$recipeIds=DB::table('recipe\u子类别')
->其中('category_id',$categoryId)
->groupBy('recipe\u id')
->拔毛(‘配方’);
返回配方::其中('id',$recipeIds)
->get();
}

我不知道如何将它们作为一个查询连接起来。

您可以从pivot表开始,如下所示:

公共功能配方(请求$Request)
{
$categoryId=explode('-',$request->idName)[0];
$recipeIds=DB::table('recipe\u子类别')
->其中('category_id',$categoryId)
->groupBy('recipe\u id')
->拔毛(‘配方’);
返回配方::其中('id',$recipeIds)
->get();
}
我不确定如何将这些作为一个查询加入。

您可以尝试:

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

$recipes = $category->recipes->unique('category_id');
注意:这将获取所有配方,然后在收集级别进行过滤,而不是在DB查询级别进行过滤。

您可以尝试:

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

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

注意:这将获取所有配方,然后在收集级别而不是数据库查询级别进行过滤。

您可以替换
Category::where('id',$id)->first()->recipes
类别::查找($id)->菜谱没有帮助解决问题,但看起来更圆滑,像您一样的SameLook是否想要->groupBy('category_id')?不是吗?您可以替换
Category::where('id',$id)->first()->recipes
类别::查找($id)->菜谱没有帮助解决问题,但看起来更圆滑,像您一样的SameLook是否想要->groupBy('category_id')?不是吗?不起作用-API在这种情况下只重新运行一个配方(类别id在透视表中,不在配方表中)不起作用-API在这种情况下只重新运行一个配方(类别id在透视表中,不在配方表中)