如何按月获取数据? Laravel Eloquent
How to get datas by month? Laravel Eloquent
使用 created_at
列,我想 在一个查询中检索数据:
- 过去一年
- 按月分组
预期的返回值应该:
$data: [
1 : [
//datas for january
],
2 : [
//datas for february
],
//etc.
]
我试过这个查询:
$data = User::query()
->whereYear('created_at', now()->year - 1)
->get(function ($q){
return groupBy(function ($q){
return Carbon::parse($q->created_at)->format('m');
});
});
但是我收到这个错误:
stripos() expects parameter 1 to be string, object given
有人可以帮我正确查询吗?
你应该使用 sql 方法 MONTH() 从日期中提取月份然后使用 groubby 。像这样:
User::query()->select('created_at', DB::raw('MONTH(created_at) month'))
->whereYear('created_at', now()->subYear())
->groupby('month')
->get();
相同变量名的嵌套闭包函数很混乱,你可以在这里简化一下
在 get
之后调用集合的 groupBy
方法,而不是显然只接受列名的构建器
$data = User::query()
->whereYear('created_at', now()->year - 1)
->get()
->groupBy(function ($q) {
return Carbon::parse($q->created_at)->format('m');
});
见Docs
使用 created_at
列,我想 在一个查询中检索数据:
- 过去一年
- 按月分组
预期的返回值应该:
$data: [
1 : [
//datas for january
],
2 : [
//datas for february
],
//etc.
]
我试过这个查询:
$data = User::query()
->whereYear('created_at', now()->year - 1)
->get(function ($q){
return groupBy(function ($q){
return Carbon::parse($q->created_at)->format('m');
});
});
但是我收到这个错误:
stripos() expects parameter 1 to be string, object given
有人可以帮我正确查询吗?
你应该使用 sql 方法 MONTH() 从日期中提取月份然后使用 groubby 。像这样:
User::query()->select('created_at', DB::raw('MONTH(created_at) month'))
->whereYear('created_at', now()->subYear())
->groupby('month')
->get();
相同变量名的嵌套闭包函数很混乱,你可以在这里简化一下
在 get
之后调用集合的 groupBy
方法,而不是显然只接受列名的构建器
$data = User::query()
->whereYear('created_at', now()->year - 1)
->get()
->groupBy(function ($q) {
return Carbon::parse($q->created_at)->format('m');
});
见Docs