2016-08-12 84 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();