2016-10-02 20 views
0

为了获得客户,即有超过2金,我写了这个代码:Laravel雄辩。如何指望查询行与GROUP_BY并具有

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 

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

Eloquent方法当使用groupBy时,“ - > count()”总是返回1。因为它是产生错误的SQL:

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

解释请,我怎样才能在Laravel雄辩像

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 

回答

1

如果你并不需要所有的信息,我也不会用明确连接提示。相反,假设你的关系是正确的设置,你可以用雄辩地说“算有两个以上的支付客户端的数量”,像这样:

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

简单,是吧? :)

+0

thanx!这真的是我需要的 –