2016-04-22 54 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>