2016-10-02 4 views
0

Um Kunden zu bekommen, die mehr als 2 Zahlungen haben, ich diesen Code geschrieben haben:Laravel eloquent. Wie Reihen auf Abfrage mit group_by zählen und mit

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

und es funktioniert gut. So etwas erzeugen:

Jetzt muss ich die Menge der Kunden erhalten, ohne alle Informationen über sie zu bekommen.

Eloquent Methode "-> count()" gibt immer 1 zurück, wenn ich groupBy verwende. Da ist es falsch SQL generieren:

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

erklären pls, wie kann ich in Laravel Eloquent etwas bekommen wie

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 

Antwort

1

Wenn Sie alle Infos nicht benötigen, würde ich vorschlagen, nicht mit expliziten Joins . Stattdessen vorausgesetzt, Ihre Beziehungen richtig eingestellt sind, können Sie Eloquent verwenden zu sagen: „die Anzahl der Kunden zählen, die mehr als zwei Zahlungen haben“, wie folgt aus:

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

Einfach, nicht wahr? :)

+0

danke! Das ist wirklich was ich brauchte –