2017-04-19 10 views
2

나는 errors이라는 테이블을 가지고 있습니다. 테이블에는 id, website_id, message & level 필드가 있습니다. 나는 가장 많은 오류가있는 상위 5 개 웹 사이트를 찾으려고 노력하고 있습니다. 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}") 기능을 사용할 수

. 그러나 당신이 웅변을 사용하고 싶다면 관계를 사용하고 이것들을 질문해야합니다. 당신이 Error 모델의 관계와 Website 모델이있는 경우 또는 예는, 당신은 가장 오류가있는 웹 사이트 모델을 얻기 위해 다음을 수행 할 수

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

저에게 맞습니다! 감사. –

+0

환영합니다 : Goodluck –

0

이 도움이 될 수 있습니다.

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