2016-10-02 68 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!這真的是我需要的 –