我得到所有标签,它看起来像这样:
"testeng" => 0
"testeng1" => 5
所以我想做的就是按价值排序,这样第一个就是价值5.任何建议我该怎么做?
$tags = ATags::with('articles')->whereHas('language',function($query) use($current_language_id){
$query->where('id','=',$current_language_id);
})->get();
$count_tag = [];
foreach($tags as $tag){
$count_tag[$tag->name] = $tag->articles->count();
}
答案 0 :(得分:2)
您可以将arsort()
用作:
arsort($count_tag)
arsort - 按相反顺序对数组进行排序并维护索引关联
OR
您可以使用withCount
直接在查询中对结果进行排序:
$tags = ATags::with('articles')
->whereHas('language',function($query) use($current_language_id){
$query->where('id','=',$current_language_id);
})
->withCount('articles')
->orderBy('articles_count', 'desc')
->take(5)
->get();
来自文档
如果您想计算没有关系的结果数 实际上加载它们你可以使用
withCount
方法 在结果模型上放置{relation}_count
列。
答案 1 :(得分:1)
您可以使用收藏集sortBy
或sortByDesc
& count
方法对结果进行排序,如下所示:
$tags = ATags::with('articles')->whereHas('language',function($query) use($current_language_id) {
$query->where('id','=',$current_language_id);
})
->get()
->sortByDesc(function($tag) { // <---- sorting it via article's count
return $tag->articles->count();
})
->take(5); // <----- fetch largest 5 from collection
您可以将闭包方法传递给
sortBy
或sortByDesc
集合的方法来操纵您的结果。