Группировки объектов в месяц и считать их laravel


мне Нужно сгруппировать и подсчитать все элементы mês. Я использую Laravel 5.2, попытался сделать так:

$mes = date('m');
$vendas = Encomenda::where('FlgStEncomenda', 'O')
         ->group("MONTH(created_at)={$mes}")
         ->count();

мне Нужно, что вернуться так:

[0] 5
[1] 10
[2] 4
[3] 11
[4] 107
[5] 110
[6] 120
[7] 5
[8] 103
[9] 104
[10] 102
[11] 0

, Где índice означает, mês и в случае, если месяц еще не пришел возвращать 0. Имеет, как сделать это с помощью Eloquente?

Author: Daniel Omine, 2016-11-23

2 answers

$mes = date('m');
$vendas = Encomenda::where('FlgStEncomenda', 'O')
         ->groupBy(\DB::raw('MONTH(created_at)'))
         ->select(\DB::raw('MONTH(created_at) as Mes, count(*) as Quantidade'))   
         ->pluck('Mes','Quantidade');


$grafico = [1 => 0, 
            2 => 0, 
            3 => 0, 
            4 => 0, 
            5 => 0, 
            6 => 0, 
            7 => 0, 
            8 => 0, 
            9 => 0, 
            10 => 0, 
            11 => 0, 
            12 => 0];

foreach($vendas as $key => $value)
{
     $grafico[(int)$key] = (int)$value;
}

, Если вы хотите искать в год

$ano = date('Y');
$vendas = Encomenda::where('FlgStEncomenda', 'O')
         ->whereRaw("YEAR(created_at)={$ano}")
         ->groupBy(\DB::raw('MONTH(created_at)'))
         ->select(\DB::raw('MONTH(created_at) as Mes, count(*) as Quantidade'))   
         ->pluck('Mes','Quantidade');

Уже даже был сделан ответ с whereRaw.

 3
Author: novic, 2017-04-13 12:59:35

Тобой вернуться, 0, array, чтобы сделать сочетание нескольких месяцев. Иначе вы можете создать таблицу для месяцев и сделать Join.

$vendas = Encomenda::select(DB::raw('MONTH(created_at) AS mes, count(id) AS qtd'))
          ->groupBy(DB::raw("MONTH(created_at)"))
          ->orderBy('mes')
          ->where('FlgStEncomenda', 'O')
          ->lists('mes', 'qtd')
          ->toArray();

$arrMeses = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

foreach($arrMeses as $key => $mes){
    if($mes == $vendas[$key]){
        $arrFoo[$mes] = $vendas[$key];
    }
    else{
        $arrFoo[$mes] = 0;
    }
}

dd($arrFoo);
 2
Author: Diego Souza, 2016-11-23 18:41:38