2016-12-18 28 views
1

我想按照他們的編號排序兩個情節。這是我的代碼:PHP Laravel按子女順序排列父母

$neededEpisodes = SharedMethods::getAround($numbers); 

$nearEpisodes = TheEpisode::where("seriesID", $seriesID)->whereHas('TheNumbers', function($q) use($neededEpisodes) { 
    $q->whereIn('episodeNumber', $neededEpisodes); 
}); 
echo $nearEpisodes->get()->toJson(); 

這將輸出以下結果:

"nearEpisodes": [{ 
     "id": 16445, 
     "the_numbers": [{ 
      "episodeID": 16445, 
      "episodeNumber": 208 
     }] 
     }, { 
     "id": 16487, 
     "the_numbers": [{ 
      "episodeID": 16487, 
      "episodeNumber": 210 
     },{ 
      "episodeID": 16487, 
      "episodeNumber": 211 
     }] 
    }] 

的問題是,The_Numbers順序應該是對面,距離210,211開始,然後208

所以我的預期輸出應該是id:16487,然後是16445.

我應該如何構建雄辯查詢來實現這一目標?

我的新的輸出:

nearEpisodes": { 
     "1": { 
      "id": 16503, 
      "episodeTitle": "Episodul 183", 
      "the_numbers": [{ 
       "episodeID": 16503, 
       "episodeNumber": 183 
      }] 
     }, 
     "0": { 
      "id": 16190, 
      "episodeTitle": "Episodul 181", 
      "the_numbers": [{ 
       "episodeID": 16190, 
       "episodeNumber": 181 
      }] 
     } 
    } 

回答

1

您可以使用收集的sortByDesc方法:

$nearEpisodes = TheEpisode::where("seriesID", $seriesID) 
       ->whereHas('TheNumbers', function($q) use($neededEpisodes) { 
        $q->whereIn('episodeNumber', $neededEpisodes); 
       }) 
       ->with(['TheNumbers' => function($q) use($neededEpisodes) { 
        $q->whereIn('episodeNumber', $neededEpisodes); 
       }]) 
       ->get(); 

$nearEpisodes = $nearEpisodes->sortByDesc(function ($item) { 
    return $item->the_numbers->max('episodeNumber'); 
})->values(); 

echo $nearEpisodes->toJson(); 
+0

這將返回我的錯誤。 – Coder

+0

調用未定義的方法Illuminate \ Database \ Query \ Builder :: sortBy() – Coder

+0

您缺少'get()'。檢查更新的答案。 –