program story

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

inputbox 2020. 10. 4. 11:01
반응형

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();

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

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

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

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

건배!


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

다음은 원시 문을 사용할 필요없이 그룹을 처리하는 더 많은 라 라벨 방법입니다.

$sources = $sources->where('age','>', 31)->groupBy('age');

$output = null;
foreach($sources as $key => $source) {
    foreach($source as $item) {
        //get each item in the group
    }
    $output[$key] = $source->count();
}

이것으로 시도

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

참고 URL : https://stackoverflow.com/questions/18533080/laravel-eloquent-groupby-and-also-return-count-of-each-group

반응형