Laravel Eloquent, group by month/year

后端 未结 6 2069
一整个雨季
一整个雨季 2020-12-10 05:04

i\'m trying to group my data by month and year.

$data ->select(DB::raw(\'count(id) as `data`\'),DB::raw(\'YEAR(created_at) year, MONTH(created_at) month\')         


        
相关标签:
6条回答
  • 2020-12-10 05:18

    Note: This is solution based on eloquent, and yes, it not the best approach, but as the question is, this is using eloquent. If you want faster way, you can do it with raw query.

    If you want to group your results for example by year, you can use closure where you will parse your datetime to desired format (year or month).

    Here is example of the code:

    $res= ModelName::where('someColumn','test')
          ->get()
          ->groupBy(function($val) {
          return Carbon::parse($val->created_at)->format('Y');
    });
    
    0 讨论(0)
  • 2020-12-10 05:20

    for latest version of mysql, the accepted answer will give error, so instead try

    $data
        ->selectRaw("
            count(id) AS data, 
            DATE_FORMAT(created_at, '%Y-%m') AS new_date, 
            YEAR(created_at) AS year, 
            MONTH(created_at) AS month
        ")
        ->groupBy('new_date')
        ->get();
    

    ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

    0 讨论(0)
  • 2020-12-10 05:25

    =>this might help someone in 2019

    $date = "2019-06-16";
    
    return date('m', strtotime($date)); //this return you 06(edited)
    

    so you can do foreach by this method , so you don't need to do the all sql things..

    0 讨论(0)
  • 2020-12-10 05:26
    $result = ModelName::selectRaw('year(created_at) year, monthname(created_at) month, count(*) data')
                    ->groupBy('year', 'month')
                    ->orderBy('year', 'desc')
                    ->get();
    
    0 讨论(0)
  • 2020-12-10 05:27

    You can try as:

    ->select(DB::raw('count(id) as `data`'), DB::raw("DATE_FORMAT(created_at, '%m-%Y') new_date"),  DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
    ->groupby('year','month')
    ->get();
    
    0 讨论(0)
  • 2020-12-10 05:34
    $data ->select(DB::raw('count(id) as `data`'),DB::raw('YEAR(created_at) year'),DB::raw('MONTH(created_at) month'))
           ->groupBy(DB::raw('YEAR(created_at)'), DB::raw('MONTH(created_at)'))
           ->get();
    
    0 讨论(0)
提交回复
热议问题