【问题标题】:Laravel Carbon Group by MonthLaravel Carbon 按月分组
【发布时间】:2017-05-19 21:32:49
【问题描述】:

谁能看到我做错了什么?

我正在尝试输出所有月份,但将它们分组以便它们是唯一的。

$months = NewsItem::select(DB::raw('MONTH("created_at") as month'))->groupBy('month')->get();
return $months;

我得到以下回复

{"month":null}

在我的数据库中,我有 5 篇新闻文章全部在 2017 年 5 月 1 日创建,所以我只收到一篇回复但我没有得到月号是对的吗?

【问题讨论】:

    标签: php mysql laravel laravel-5 eloquent


    【解决方案1】:

    你可以使用 groupBy() 方法和闭包:

     $months = NewsItem::groupBy(function($d) {
         return Carbon::parse($d->created_at)->format('m');
     })->get();
    

    或者先获取数据,然后在 Eloquent 集合上使用groupBy()

     $months = NewsItem::get()->groupBy(function($d) {
         return Carbon::parse($d->created_at)->format('m');
     });
    

    【讨论】:

    • 嗨,这给了我 strtolower() 期望参数 1 是字符串,对象给定错误。
    • 你必须使用第二种方法。首先获取然后groupby
    【解决方案2】:

    为什么在用例中需要 group by 子句?

    您没有获取任何需要分组依据的其他数据,您只是想要一个不同月份的列表,因此请使用 distinct。

    $months = NewsItem::selectRaw("MONTH(created_at) as month")->distinct()->get();
    

    还要查看 Alexey 提供的解决方案,您需要从数据库中获取整个数据集,这对于您正在尝试执行的操作非常低效。 distinct() 查询将比 select * 快得多,并将结果分组到 PHP 中。

    编辑:

    这里有一点旁注,你得到null 作为值返回的原因是因为你在MONTH() 函数中使用了一个字符串而不是实际的字段。

    【讨论】:

      【解决方案3】:

      您可以简单地使用 groupby 和 mysql MONTH。

      $months = NewsItem::groupby(\DB::raw('MONTH(created_at) as month'))->get();
      

      【讨论】:

        【解决方案4】:

        你可以这样做:

        NewsItem::get(["*",\DB::raw('MONTH(created_at) as month')])->groupBy('month');
        

        【讨论】:

          【解决方案5】:

          要获得每月收入,您可以尝试以下代码:-

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

          【讨论】:

            【解决方案6】:
            $month = NewsItem::select(
            DB::raw('DATE_FORMAT(created_at, "%M") as month'))
            ->groupBy('month')
            ->get();
            

            【讨论】:

              猜你喜欢
              • 2017-03-24
              • 2021-12-04
              • 2018-08-26
              • 1970-01-01
              • 1970-01-01
              • 2019-05-10
              • 2021-08-10
              • 1970-01-01
              相关资源
              最近更新 更多