【问题标题】:How to get datas by month? Laravel Eloquent如何按月获取数据? Laravel 雄辩
【发布时间】:2019-09-25 23:31:12
【问题描述】:

使用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() 期望参数 1 是字符串,给定对象

有人可以帮我正确查询吗?

【问题讨论】:

    标签: laravel laravel-5.8


    【解决方案1】:

    变量名相同的嵌套闭包函数很混乱,你可以在这里简化一下

    get 之后调用集合上的groupBy 方法,而不是显然只接受列名的构建器

    $data = User::query()
                ->whereYear('created_at', now()->year - 1)
                ->get()
                ->groupBy(function ($q) {
                    return Carbon::parse($q->created_at)->format('m');
                });
    

    Docs

    【讨论】:

    • 谢谢伙计。我认为它需要一个子查询。你刚刚成功了。
    【解决方案2】:

    您应该使用 sql 方法 MONTH() 从日期中提取月份,然后使用 groubby 。像这样:

     User::query()->select('created_at',  DB::raw('MONTH(created_at) month'))
    ->whereYear('created_at', now()->subYear())
    ->groupby('month')
    ->get();
    

    【讨论】:

    • 这会产生语法错误select *, MONTH(created_at) month from users` where year(created_at) = ?按“月”分组
    • 它返回唯一值。我只想按去年的月份对数据进行分组。感谢先生的回复。
    • 一月份应该有两个数据,但这里只显示一个数据。在我的帖子中查看我的预期值。感谢先生的回复。
    猜你喜欢
    • 2016-02-14
    • 2016-03-09
    • 2014-03-26
    • 2020-12-02
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多