首页 > 解决方案 > PHP Laravel如何将日期数据分组为月份并添加标题

问题描述

我正在构建一个小型Laravel应用程序,我想在其中显示按月分组的特定版本。像这样的东西:

January
11.1 - blabla
       more blablabla the same day

15.1 - blablabla

February
05.2 - blabla

etc...

所以,在我的控制器中,我只是这样做:

public function index() {

  $releases = Release::orderBy('release_date', 'asc')->get();

  return view('pages.index')->with('releases', $releases);
}

在我的刀片视图文件中,我浏览了数据:

@foreach ($releases as $release)
     <div>
        <p>
            <span>{{ \Carbon\Carbon::parse($release->release_date)->format('d. M')}}</span>&nbsp;
            <span>{{$release->artist}} - {{$release->album_title}} </span>
        </p>
    </div>
@endforeach

这为我提供了正确的数据,例如数据库条目列表,但如前所述,我想按月对它们进行分组,并为每个月添加一个标题。我怎样才能做到这一点?

如果这很重要,我正在使用Laravel 5.5...

标签: phplaravellaravel-5

解决方案


你可以这样做:

表:发布

id    |    released_at    |    bla_details    |    month_header_id

表:month_headers

id    |    month(specific length int)    |    year(specific length int)    |    header

型号:Release.php

public function month_header() 
{
    return $this->belongsTo('App\Models\Month');
}

模型:MonthHeader.php

public function releases() 
{
    return $this->hasMany('App\Models\Release');
}

助手:getMonthName($integer)

控制器:TempController.php

public function temp()
{
    $response['month_headers'] = MonthHeader::all();
    return view('tempView', $response);
}

刀片视图:tempView.blade.php

@foreach($month_headers as $header)
    {{getMonthName($header->month)." (".$header->header.")"}}
    <ul>
        @foreach($month_headers->releases() as $release)
            <li>{{date('d.m', strtotime($release->released_at))." - ".$release->bla_details}}</li>
        @endforeach
    </ul>
@endforeach

查看输出

一月(一月标题)

  • 11.1 - 废话
  • 15.1 - 废话

二月(二月标题)

  • 05.2 - 废话
  • 06.2 - 废话

ETC...


推荐阅读