2014-12-03 2 views
0

내 문제는 기사의 의견에 대한 투표 수를 계산하는 것입니다. 그래서 사용자는 기사의 좋은 의견을 upvote 할 수 있으며, 가장 많은 의견이있는 댓글을 먼저 나열하고 싶습니다. 제가 지금 따르고있는 접근 방식은 한계점과 함께 이미 투표 된 유일한 표를 나열하는 것입니다. 조인 테이블 (comments_users)에 나열되지 않은 항목은 무시됩니다.Cakephp는 기존 항목이 아닌 join 결과의 수를 계산합니다.

public function commentsOfArticle($articleId){ 

    $options['group'] = array('Comment.articleId'); 
     $options['conditions'][] = array('Comment.article_id' => $articleId); 

    $options['joins'][] = array('table' => 'comments_users', 
     'alias' => 'Votes', 
     'type' => 'inner', 
     'conditions' => array(
      'Votes.comment_id = Comment.id' 
     )); 

    $options['fields'] = array('Comment.*','COUNT(Votes.user_id) AS votes'); 
    $options['contain'] = array(.......); 
    $options[ 'order'] = array('votes DESC'); 


    return $this->find('all',$options); 
} 

내가 키 생각 : 내 테이블 사용자, 의견과 HABTM 조인 테이블 comments_users (별명 투표)

내 현재의 접근 방식은이가 좀 더 명확하게하기 라인은

$options['fields'] = array('Comment.*','COUNT(Votes.user_id) AS votes'); 

입니다.이 의견을 수락 할 수 있습니다. 투표에 항목이 없습니다. 내 결과의 끝에, 투표 = 0으로 할 수 있습니까?

답변

1

시도는 JOIN에서 내측으로는

$options['joins'][] = array('table' => 'comments_users', 
    'alias' => 'Votes', 
    'type' => 'LEFT', 
    'conditions' => array(
     'Votes.comment_id = Comment.id' 
    )); 
남아 변경