Группировки объектов в месяц и считать их 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
?
2
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