$categories = PostCategoryQuery::create()->find();
$categories_array = [];
foreach ($categories as $k => $category):
$posts_count = PostQuery::create()->filterByPostCategory($category)->count();
$categories_array[$k]['category'] = $category->getName();
$categories_array[$k]['count'] = $posts_count;
endforeach;
uasort($categories_array, "sortByCount");
function sortByCount($a, $b) {
return $a['count'] > $b['count'] ? -1 : 1;
}
我想通过相关帖子的数字获得'类别'数组顺序,我认为必须有一种方法可以缩短我的代码,希望得到一些建议,谢谢〜
答案 0 :(得分:1)
如果在你的ORM中你可以使用一个简单的查询分组,你就可以执行像
这样的选择 select category, count(*)
from post_category
inner join post on post_category.category_id = post.category_id
group by category
order by count(*)
然后您的代码将缩减为查询..
答案 1 :(得分:0)
我并不完全了解你的模特,但我会推荐这样的东西:
$categories_array = PostQuery::create('pq')
->joinPostCategory('pc')
->withColumn('COUNT(pq.id)', 'count')
->groupBy('pc.id')
->select(array('pc.name', 'count'))
->orderBy('count')
->find();
// Should return PropelArrayCollection(
// array('pc.name' => 'category1', 'count' => 123),
// array('pc.name' => 'category2', 'count' => 234)
// )
这样可以避免对象保湿,因为您只选择所需的列。