2016-04-22 73 views
0

我有一个简单的博客系统,我想在侧边栏中显示一个存档,其中显示所有月份&年的博客帖子。该相关博客文章在这种格式的数据库中有一个Created_at &的updated_at值:2016-04-20 12:05:10但是,当我这样做:显示独特的月份和年份的帖子+过滤它们 - Laravel 5.2

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

我显然得到重复的值,如果相关博客文章具有相同的月&年。我如何获得独特的月份&年+我可以根据该月份或年份进行排序并获得多个帖子?因为如果我得到独特的价值,我可能会得到只有1后,当我筛选结果。

更新: 你可以做这样的事情

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

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

回答

1

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

$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(); 
1

也许你可以使用这样的事情:

$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>