2014-12-03 3 views
0

Моя проблема в том, что я хочу подсчитать голоса за комментарий к статье. Таким образом, пользователи могут поддерживать хорошие комментарии к статье, и я хочу сначала перечислить комментарии с наибольшим количеством голосов. Подход, который я сейчас выполняю, работает с ограничением, что перечислены только голоса, которые уже были проголосованы. те, которые не указаны в таблице соединений (comments_users), игнорируются. , чтобы сделать его немного более ясно, мои таблицы пользователи, комментарии и HABTM таблицу соединения comments_users (псевдоним голосов)Заказ CakePHP по количеству результатов объединения, включая не существующие записи

мой нынешний подход:

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); 
} 

я думаю, что ключ строка

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

можно получить те комментарии, у которых нет записи в голосовании t в конце моих результатов, только с голосами = 0?

ответ

1

Попробуйте изменить JOIN от внутренней к оставил

$options['joins'][] = array('table' => 'comments_users', 
    'alias' => 'Votes', 
    'type' => 'LEFT', 
    'conditions' => array(
     'Votes.comment_id = Comment.id' 
    )); 
Смежные вопросы