2016-12-31 3 views
0
$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

어떤 PHP 버전을 사용하고 있습니까? –

+0

@RossWilson PHP7 with Propel 2.0 – zjuwujunchao

답변

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(*) 

하고 코드가 쿼리에 줄어들 것 같은 선택을 수행 할 수 귀하가

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) 
//) 

이렇게하면 원하는 열만 선택하므로 개체 수화를 피할 수 있습니다.