[laravel] Laravel Eloquent groupBy () AND 또한 각 그룹의 개수를 반환합니다.

다른 열 중에서 브라우저 버전 열이 포함 된 테이블이 있습니다. 그리고 기록 세트에서 각 유형의 브라우저에 몇 개가 있는지 알고 싶습니다. 따라서 다음과 같이 끝낼 필요가 있습니다. Total Records : 10; Internet Explorer 8 : 2; 크롬 25 : 4; Firefox 20 : 4. (모두 10 개까지 추가)

여기 내 두 펜스가 있습니다.

$user_info = Usermeta::groupBy('browser')->get();

물론 여기에는 각 브라우저 수가 아니라 3 개의 브라우저 만 포함되어 있습니다. 어떻게 할 수 있습니까?



답변

이것은 나를 위해 일하고 있습니다.

$user_info = DB::table('usermetas')
                 ->select('browser', DB::raw('count(*) as total'))
                 ->groupBy('browser')
                 ->get();


답변

이것은 나를 위해 작동합니다 (Laravel 5.1) :

$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();


답변

감사합니다 Antonio,

lists마지막에 명령을 추가 했으므로 키와 개수가있는 하나의 배열 만 반환됩니다.

라 라벨 4

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser');

라 라벨 5.1

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser')->all();

Laravel 5.2 이상

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->pluck('total','browser')->all();


답변

콜렉션을 얻으려면 groupBy 및 count :

$collection = ModelName::groupBy('group_id')
->selectRaw('count(*) as total, group_id')
->get();

건배!


답변

그런 식으로도 작동하며 조금 더 깔끔합니다.
getQuery()이미 테이블 참조를 포함하는 기본 빌더를 반환합니다.

$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
                     ->select('browser', $browser_total_raw)
                     ->groupBy('browser')
                     ->pluck('total','browser');


답변

  1. 열다 config/database.php
  2. 연결 설정에서 strict키 찾기mysql
  3. 값을 false

답변

이것으로 시도

->groupBy('state_id','locality')
  ->havingRaw('count > 1 ')
  ->having('items.name','LIKE',"%$keyword%")
  ->orHavingRaw('brand LIKE ?',array("%$keyword%"))