LaravelEloquent。如何使用 group_by 计算查询中的行数并具有

Laravel Eloquent. How to count rows on query with group_by and having

为了获得付款次数超过 2 次的客户,我编写了以下代码:

Clients->select(....)
    ->leftJoin('payments')
    ->selectRaw('count(payments.client_id) as num_payments')
    ->groupBy($this->primaryKey)
    ->having('num_payments', '>', 2)
->get()

而且效果很好。生成类似的东西:

select `client_id`, ..., count(payments.client_id) as num_payments
from `clients` left join `payments` on ... 
group by `id_client`
having `num_payments` > 2

现在我需要获取客户的数量而不需要获取有关他们的所有信息。

当我使用 groupBy 时,

Eloquent 方法“->count()”总是 returns 1。因为生成错误 sql:

select count(*) from `clients` left join `payments` on ... group by `id_client`

请解释一下,我怎样才能进入 Laravel Eloquent 类似

的东西
select count(*) from
  (select `client_id`, ..., count(payments.client_id) as num_payments
  from `clients` left join `payments` on ... 
  group by `id_client`) as new_table

如果您不需要所有信息,我建议您不要使用显式连接。相反,假设您的关系设置正确,您可以使用 Eloquent 表示 "count the number of clients that have more than two payments",如下所示:

Client::has('payments', '>', 2)->count();

很简单吧? :)