显示独特的月份和年份的帖子 + 过滤它们 - Laravel 5.2

Showing unique Months & years of posts + filter them - Laravel 5.2

我有一个简单的博客系统,我想在边栏中显示一个存档,它显示了博客的所有月份和年份post。博客posts 在数据库中有一个 Created_at 和 updated_at 值,格式如下:2016-04-20 12:05:10 但是当我这样做时:

<ul>
@foreach($blogposts as $post)
  <li class="bow-item"> <a href="#">{{$post->created_at->format('F Y')}}</a> </li>
@endforeach
</ul>

如果博客post具有相同的月份和年份,我显然会得到重复的值。我如何获得唯一的月份和年份 + 我能否根据该月份或年份进行排序并获得多个 posts?因为如果我得到唯一值,我在过滤结果时可能只会得到 1 post。

更新: 你可以这样做

$dates = DB::table('blogposts')
    ->distinct()
    ->orderBy('created_at')
    ->get([
        DB::raw('YEAR(`created_at`) AS `year`'),
        DB::raw('MONTH(`created_at`) AS `month`'),
    ]);

问题是我的值是用这种方法保存为整数的。但我想格式化日期。

我知道你可以 运行 整个原始查询:

$query = "
    SELECT
        created_at
    FROM blogposts
    GROUP BY YEAR(created_at) DESC, MONTH(created_at) DESC
";
$dates = DB::select($query);

或者这可能有效(未经测试且可能无效):

$dates = DB::table('blogposts')
    ->select('created_at')
    ->orderBy(DB::raw('YEAR(created_at) DESC, MONTH(created_at) DESC')
    ->get();

也许你可以使用这样的东西:

$periods = DB::table('blogposts')
    ->select(DB::raw('YEAR(created_at) year, MONTH(created_at) month, MONTHNAME(created_at) month_name)
    ->groupBy('year')
    ->groupBy('month')
    ->orderBy('year', 'desc')
    ->orderBy('month', 'desc')
    ->get();

然后输出如下:

<ul>
    @foreach($periods as $period)
    <li class="bow-item"> <a href="#">{{$period->year}} - {{$period->month_name}}</a></li>
    @endforeach
</ul>

这对我有用。

查询:

$dates = DB::table('blogposts')
     ->select(DB::raw('YEAR(created_at) year, MONTH(created_at) month, MONTHNAME(created_at) month_name'))
     ->distinct()
     ->orderBy('year', 'desc')
     ->orderBy('month', 'desc')
     ->get();

输出:

@foreach($dates as $date) 
    {{ $date->month_name }}, {{ $date->year }} <br>
@endforeach