194 votes

Laravel Eloquent groupBy() AND renvoie également le nombre de chaque groupe.

J'ai un tableau qui contient, entre autres colonnes, une colonne de versions de navigateurs. Et je veux simplement savoir, à partir de l'ensemble des enregistrements, combien il y a de versions de chaque type de navigateur. J'ai donc besoin d'obtenir quelque chose comme ceci : Total des enregistrements : 10 ; Internet Explorer 8 : 2 ; Chrome 25 : 4 ; Firefox 20 : 4 (le total est de 10).

Voici mes deux pence :

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

Bien sûr, cela ne contient que les 3 navigateurs et non le nombre de chacun. Comment puis-je faire cela ?

10voto

Yauheni Prakopchyk Points 4265

Ça marche aussi comme ça, c'est un peu plus ordonné. getQuery() renvoie simplement le constructeur sous-jacent, qui contient déjà la référence à la table.

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

5voto

Laravel Version 8

Suppression de la dépendance de la DB

     $counts = Model::whereIn('agent_id', $agents)
        ->orderBy('total', 'asc')
        ->selectRaw('agent_id, count(*) as total')
        ->groupBy('agent_id')
        ->pluck('total','agent_id')->all();

4voto

Yuvraj Hinger Points 34
$post = Post::select(DB::raw('count(*) as user_count, category_id'))
              ->groupBy('category_id')
              ->get();

Ceci est un exemple qui donne le nombre d'articles par catégorie.

4voto

Jasim Juwel Points 426

Essayez avec ceci

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

2voto

Steven Points 31

Une autre façon de faire serait la suivante :

$data = Usermeta::orderBy('browser')->selectRaw('browser, count(*) as total')->get()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X