2016-08-12 112 views
0

我有类别和文章表,它们处于多对多的关系。我有模型上建立的关系。与条件建立关系?

如何获取所有类别ID为1的文章?

我已经试过:

Article::whereHas('category', function ($query) use ($id) { 
     $query->where('category_id', $id); 
    })->get(); 

以上的作品,但似乎笨重,有没有口才更有效的方式来做到这一点?

回答

0

您可以使用急切的加载技术。

Article::with(['category', function ($query) use ($id) { 
     $query->where('category_id', $id); 
    }])->get(); 
0

以下groupBy代码假设Category::find($id)->articles不是出于任何原因的选项。

groupBy呢?

Article::groupBy('category') 
      ->having('category', $id) 
      ->get(); 
0

whereHas将返回匹配条件的文章,但不会过滤文章,然后在相同条件获取。因此,您可以创建一个包含约束匿名函数,并将它传递给whereHaswith方法:

$filter = function ($query) use ($categoryId) { 
    $query->where('category_id', '=', $categoryId); 
}; 

Article::whereHas('category', $filter) 
     ->with(['category' => $filter]) 
     ->get();