Laravel - 按月获取数据

时间:2017-04-25 16:41:19

标签: mysql laravel eloquent

我需要按指定年份的月份检索数据 我想在一个查询中做到这一点。

在我的数据库架构中,我有两列存储monthyear

我试过了:

Outgoings::where('year', 2017)->groupBy('month')->get();

但我明白了:

  

SQLSTATE [42000]:语法错误或访问冲突:1055表达式#1   SELECT列表不在GROUP BY子句中并包含nonaggregated   列'gestionale.outgoings.id',它不依赖于功能   在GROUP BY子句中的列;这是不相容的   sql_mode = only_full_group_by(SQL:select * from outgoings where   year = 2017年组month

所以我想到的唯一一件事就是有点棘手,抓取所有月份和每个月查询数据库并得到一个值的总和。

类似的东西:

for ($i=1; $i<=12; $i++){
            $out = Outgoing::where('year', 2017)->where('month', $i)->get();
            // sum
        }

有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

在Laravel中默认启用Scrict模式,这会导致sql_mode=only_full_group_by错误。您可以在config/database.php

中将其关闭
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    ....
    'strict' => false, // This is the option you need to change.
    'engine' => null,
],

如果您不想使用groupBy()并且想要迭代数据,请先加载数据然后使用集合。例如,此代码将只创建一个查询(您的代码将创建12个查询):

$data = Outgoing::where('year', 2017)->get();
for ($i=1; $i<=12; $i++) {
    $out = $data->where('month', $i);
    // Do something with $out.
}

答案 1 :(得分:0)

每月从数据库中获取收入(Laravel):-

$getMonthlyReport = OrderMaster::select(DB::raw("sum(order_total_amt) as  earnings,date_format(order_date, '%Y-%m') as YearMonth"))
    ->groupBy('order_date')
    ->get();

$dataArr = [];
$labelArr = [];


foreach($getMonthlyReport as $report){
    array_push($dataArr, $report->earnings);
    array_push($labelArr, $report->YearMonth);
}
    return Response::json([
    'status' => true,
    'data' => $dataArr,
    'label' => $labelArr,
]);

}