Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp按联接结果计数排序,包括不存在的条目_Cakephp_Join_Count_Has And Belongs To Many - Fatal编程技术网

Cakephp按联接结果计数排序,包括不存在的条目

Cakephp按联接结果计数排序,包括不存在的条目,cakephp,join,count,has-and-belongs-to-many,Cakephp,Join,Count,Has And Belongs To Many,我的问题是,我想为一篇文章的评论计票。 因此,用户可以投票给一篇文章的好评论,我想首先列出投票最多的评论。我现在遵循的方法是有效的,有限制的,只列出已经投票的选票。未在联接表中列出的(注释\用户)将被忽略。 为了更清楚一点,我的表是用户、评论和HABTM联接表评论(别名投票) 我目前的做法是: public function commentsOfArticle($articleId){ $options['group'] = array('Comment.articleId');

我的问题是,我想为一篇文章的评论计票。 因此,用户可以投票给一篇文章的好评论,我想首先列出投票最多的评论。我现在遵循的方法是有效的,有限制的,只列出已经投票的选票。未在联接表中列出的(注释\用户)将被忽略。 为了更清楚一点,我的表是用户评论和HABTM联接表评论(别名投票)

我目前的做法是:

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

有没有可能收到那些在我的结果末尾投票表中没有条目的评论,只要投票=0?

尝试将
连接从内部更改为左侧

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