在Laravel中建立查询器GROUP BY, HAVING, COUNT.

问题描述 投票:0回答:1

如何在query builder中表达这段代码. 我使用的是Laravel 6.

SELECT * FROM feedback GROUP BY noTicket having count(`status`) < 2 

我的代码:

$feedback = DB::table('feedback')
            ->groupBy('noTicket')
            ->having('count(status)', '<', 2)
            ->get();

错误代码:

SQLSTATE[42000]: Syntax error or access violation: 1055 'sifora.feedback.idFeedback' isn't in GROUP BY 
(SQL: select * from `feedback` group by `noTicket` having `count(status)` < 2) 

我的代码有什么问题? SQL代码和查询器之间似乎不匹配.

谢谢你的帮助

mysql laravel eloquent query-builder laravel-6
1个回答
2
投票

这是查询的工作版本

select noTicket
from feedback
group by noTicket
having count(status) < 2;

这就是查询构建器。

return DB::table('feedback')
    ->groupBy('noTicket')
    ->having(DB::raw('count(status)'), '<', 2)
    ->pluck('noTicket'); // you may replace this with get()/select()

1
投票

这里是完整的代码。非常感谢Ersoy

        $getArray = DB::table('feedback')
            ->groupBy('noTicket')
            ->having(DB::raw('count(status)'), '<', 2)
            ->pluck('noTicket');
        $feedback = DB::table('feedback')
            ->whereIn('noTicket', $getArray)->get();

1
投票
$feedback  = DB::table('feedback')
    ->selectRaw('feedback.*, count(status) as count_status')
    ->groupBy('noTicket')
    ->havingRaw('count(status) > ?', [2])
    ->get();

另外,严格模式也存在,你可以在configdatabase.php中禁用它。

'connections' => [
    'mysql' => [
        'strict' => false
    ]
]

但我不建议你这么做。看看这个 https:/dev.mysql.comdocrefman5.7engroup-by-handling.html。 在这里你可以得到更多的信息,如何组的工作。

© www.soinside.com 2019 - 2024. All rights reserved.