2017-09-24 126 views
0

我有Netflix-esque(層次感)的模型。作爲一個例子,我有一門屬於ToMany集合的屬於ToMany集合的課程,屬於ToMany集團,屬於ToMany集團。課程是最低級別,最高級別爲Group。沿着連鎖店,每個人都屬於下一個鏈接的許多部分。返回來自分層belongsToMany關係的所有數據Laravel 5.3

我正在使用一個過濾器按鈕,將從Wordpress調用我的Laravel API。當我傳遞組ID和子組ID時,我需要能夠返回屬於該子組的集合。但我需要的是這樣的:

$group->with('subgroups')->where('subgroup_id')->with('collections')->with('courses')->with('lessons'); 

但是,那種語法不起作用。有沒有辦法查詢每個級別,並獲得該級別的關係?

如果需要更多代碼,我很樂意分享更多。

+0

什麼是你期望的輸出?只是'集合'?還是完整的層次結構? – fubar

+0

你的例子中'$ group'是什麼? – fubar

+0

@fubar,我的預期輸出將是每個集合對象與它的一系列課程。在每個課程對象中,都會有與之相關的一系列課程。 $ group只是指從我的路線傳遞的Group :: find($ id)的變量 – ryanpback

回答

1

以下是未經測試的,但應該希望能立即工作,或給你一個關於如何自己解決問題的想法。

有幾點:

  1. 您可以在with調用內鏈關係。例如。 courses.lessons將獲得全部courses及相關lessons找到的collections
  2. whereHas允許您查詢關係。在此示例中,我正在查找所有集合,其子集與傳遞的子組ID相匹配,並且還具有與傳遞的組ID相匹配的組。

例子:

$groupId = 123; 
$subgroupId = 456; 

$collections = Collection::with('courses.lessons') 
    ->whereHas('subgroup', function ($query) ($groupId, $subgroupId) { 
     return $query->whereHas('group', function ($query) use ($groupId) { 
       return $query->where('id', $groupId); 
      }) 
      ->where('id', $subgroupId); 
    }) 
    ->get(); 
+0

非常感謝您的幫助!我標明這個答案是正確的。它花了一點時間玩,但我確實得到了它。 這是我用來使它工作的代碼。 ('subgroups',函數($ query)使用($ subgroupId,$ groupId){ return $ query-> whereHas('groups')返回$ query-> where('groups.lessons') - > whereHas ,函數($ query)use($ groupId){ return $ query-> where('group_id',$ groupId); }) - > where('subgroup_id',$ subgroupId); }) - > get ); – ryanpback