Laravel:如何用 eloquent 表达 HAVING COUNT

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25516371/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 10:00:25  来源:igfitidea点击:

Laravel: how to express HAVING COUNT in eloquent

phpsqllaravel

提问by pixeline

How can I express this query in Laravel?

我如何在 Laravel 中表达这个查询?

SELECT `projects_issues`.* FROM `projects_issues` 

 JOIN `projects_issues_tags` 
    ON `projects_issues_tags`.`issue_id` = `projects_issues`.`id` 

 JOIN `tags` 
    ON (`tags`.`id`  = `projects_issues_tags`.`tag_id`) 

WHERE `project_id` = '1' 
AND `tags`.`tag` IN('tagname1','tagname2')

GROUP BY `projects_issues`.`id` 
HAVING COUNT(DISTINCT `tags`.`tag`) = 2

ORDER BY `projects_issues`.`updated_at` DESC

Right now my code is this. `

现在我的代码是这样的。`

$issues = \Project\Issue::with('tags');

        if ($tags || $sort_by != 'updated')
        {
            $issues = $issues
                ->join('projects_issues_tags', 'projects_issues_tags.issue_id', '=', 'projects_issues.id')
                ->join('tags', 'tags.id', '=', 'projects_issues_tags.tag_id');
        }

        $issues = $issues->where('project_id', '=', Project::current()->id);

        if ($tags)
        {
            $tags_collection = explode(',', $tags);
            $tags_amount = count($tags_collection);

            $issues = $issues->where_in('tags.tag', $tags_collection);//->get();
        }

        $issues = $issues
            ->group_by('projects_issues.id')
            ->order_by($sort_by_clause, $sort_order);

        if($tags && $tags_amount>1){
            $issues = $issues->having('count', '=', $tags_amount);
        }

        $issues = $issues->get(array('projects_issues.*'));

It returns this error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count' in 'having clause'

它返回此错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count' in 'having clause'

回答by voodoo417

Use havingRaw:

使用havingRaw

$issues = $issues->havingRaw("COUNT(DISTINCT `tags`.`tag`) = ".$tags_amount);

回答by pixeline

Found the answer.

找到了答案。

In Laravel 3:

在 Laravel 3 中:

$issues = $issues->having(DB::raw('COUNT(DISTINCT `tags`.`tag`)'),'=',$tags_amount);

I suspect @voodoo417 answer works for Laravel 4.

我怀疑 @voodoo417 答案适用于 Laravel 4。