Laravel - 按月获取数据
Posted
技术标签:
【中文标题】Laravel - 按月获取数据【英文标题】:Laravel - Get data by month 【发布时间】:2017-04-25 16:41:18 【问题描述】:我需要按给定年份的月份检索数据。 我想在一个查询中完成。
在我的数据库架构中,我有两列存储 month
和 year
。
我试过了:
Outgoings::where('year', 2017)->groupBy('month')->get();
但我明白了:
SQLSTATE[42000]:语法错误或访问冲突:1055 表达式 #1 的 SELECT 列表不在 GROUP BY 子句中并且包含非聚合 列“gestionale.outgoings.id”在功能上不依赖 在 GROUP BY 子句中的列上;这与 sql_mode=only_full_group_by (SQL: select * from
outgoings
whereyear
= 2017 年分组month
)
所以我唯一想到的是有点棘手,获取所有月份并为每个月查询数据库并获取一个值的总和。
类似:
for ($i=1; $i<=12; $i++)
$out = Outgoing::where('year', 2017)->where('month', $i)->get();
// sum
有更好的解决方案吗?
【问题讨论】:
【参考方案1】:在 Laravel 中默认开启严格模式,这会导致 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.
【讨论】:
我已经对其进行了测试,但for
中存在问题。由于某种原因,每个循环似乎 where
不起作用。我有$out = $data->where('month', $i)->sum('price');
并且总是返回0
这是第一个月的总和。也许链接在哪里?
@ChristianGiupponi 我没有看到数据,所以我在这里帮不了你。
我只有一个带有price = 100
和month=4
的条目。如果我手动设置4
它会得到结果,但在for 中只设置0
。也许在每个循环中都会添加 where ->where('month', 1)->where('month', 2)
等?
@ChristianGiupponi 不,如果您正在使用它们,集合不会添加 wheres,正如我所展示的那样。尝试调试它。查看dd($data)
数据,打印出$data->where('month', $i)->count();
等
我在查询中添加了一个监听器,在第一个循环之后我得到:select count(*) as aggregate from
outgoings` where year
= ?和month
= ?和month
= ?和month
= ?` 所以它添加了哪里【参考方案2】:
每月从数据库中获取收益(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,
]);
【讨论】:
以上是关于Laravel - 按月获取数据的主要内容,如果未能解决你的问题,请参考以下文章