2016-04-22 5 views
0

У меня есть простая система блога, в которой я хочу показать архив на боковой панели, где показаны все месяцы & лет блога. В имеют · блоги, · значение updated_at created_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 сообщение, когда я фильтрую результаты.

Update: Вы можете сделать что-то вроде этого

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