2017-04-19 8 views
2

私はerrorsというテーブルを持っています。テーブルには、id, website_id, message & levelというフィールドがあります。私は、最もエラーの多い上位5つのWebサイトを取得しようとしています。 SQLクエリは
SELECT website_id, COUNT(id) AS 'errors' FROM errors GROUP BY website_id ORDER BY COUNT(*) DESCLaravelは、ほとんどのレコードでトップ5のIDを取得します

私はLaravalとクエリビルダ/雄弁でこれを行う方法がありません。人々が私を助けてくれますか? (:読書のための

おかげ

データベースのスクリーンショット:! enter image description here

答えて

4

あなたはあなたの生のクエリを実行するためにDB::raw("{query}")機能を使用することができ

。しかし、もしあなたが雄弁を使用したいのであれば、関係を使ってこれらの質問をしなければなりません。

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

ボックスの外で考えてupvote。 –

+0

あなたのソリューションも機能するように見えるので、私もそれを試してみよう!助けてくれてありがとう。 –

+0

@KoenvandeSandeもし私があなただったら、生のクエリを使う代わりに、このEloquentソリューションを使用します。 –

1

はこれを試してみてください: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

Works for me!ありがとう。 –

+0

ようこそ:) Goodluck –

0

これは役立つかもしれない:あなたはErrorモデルに関連してWebsiteモデルを持っている場合はたとえば、あなたはほとんどのエラーでWebサイトのモデルを取得するには、次の操作を行うことができます。

$result = Website::selectRaw("website_id,count(id) as errors") 
       ->groupBy('website_id') 
       ->orderBy('errors','DESC') 
       ->limit('5') 
       ->get(); 
関連する問題