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();
很简单吧? :)
为了获得付款次数超过 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();
很简单吧? :)