2017-04-19 3 views
2

Ich habe eine Tabelle mit dem Namen errors. Die Tabelle hat die folgenden Felder: id, website_id, message & level. Ich versuche, die Top 5 Websites mit den meisten Fehlern zu bekommen. Die SQL-Abfrage wird
SELECT website_id, COUNT(id) AS 'errors' FROM errors GROUP BY website_id ORDER BY COUNT(*) DESCLaravel erhalten Top 5 IDs mit den meisten Aufzeichnungen

Ich habe keine Ahnung, wie dies mit Laraval und dem Abfrage-Generator/eloquent zu tun. Könnten Sie mir helfen? (:

Danke fürs Lesen

Database Screenshot: enter image description here

Antwort

4

Sie könnten die DB::raw("{query}") Funktion verwenden, um Ihre RAW-Abfrage ausführen

. Aber wenn Sie eloquent verwenden möchten, müssen Sie Relationen verwenden und diese abfragen oder Wenn Sie beispielsweise ein Website Modell mit einer Beziehung zu einem Error Modell haben, können Sie folgendermaßen vorgehen, um die Website-Modelle mit den meisten Fehlern zu erhalten:

Website::withCount('errors')   // Count the errors 
    ->orderBy('errors_count', 'desc') // Order by the error count 
    ->take(5)       // Take the first 5 
    ->get(); 
+0

upvote für den Blick über den Tellerrand. –

+0

Ihre Lösung sieht auch so aus, als ob sie funktioniert, also werde ich das auch versuchen! Danke für die Hilfe. –

+0

@KoenvandeSande Wenn ich Sie wäre, würde ich diese Eloquent-Lösung anstelle von rohen Abfragen verwenden. –

1

Try this: https://laravel.com/docs/5.4/queries#retrieving-results

$errors = DB::table('errors') 
     ->select('website_id', DB::raw('COUNT(id) as errors')) 
     ->groupBy('website_id') 
     ->orderBy(DB::raw('COUNT(id)'), 'DESC') 
     ->take(10) 
     ->get(); 
+0

Funktioniert für mich! Vielen Dank. –

+0

Willkommen :) Goodluck –

0

Dies kann hilfreich sein.

$result = Website::selectRaw("website_id,count(id) as errors") 
       ->groupBy('website_id') 
       ->orderBy('errors','DESC') 
       ->limit('5') 
       ->get(); 
Verwandte Themen