2016-04-22 9 views
0

Ich habe ein einfaches Blog-System, wo ich ein Archiv in der Seitenleiste anzeigen möchte, die alle Monate & Jahre der Blogposts zeigt. Die Blogeinträge haben einen created_at & updated_at Wert in der Datenbank in diesem Format: 2016-04-20 12:05:10 Aber wenn ich dies tun:Zeige einzigartige Monate und Jahre Beiträge + filter sie - Laravel 5.2

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

i get offensichtlich Werte wiederholt, wenn Blogeinträge im selben Monat & Jahr. Wie bekomme ich die einzigartigen Monate & Jahre + kann ich basierend auf diesem Monat oder Jahr sortieren und mehrere Beiträge erhalten? Denn wenn ich eindeutige Werte bekomme, bekomme ich wahrscheinlich nur einen Beitrag, wenn ich die Ergebnisse filtere.

Update: Sie können

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

wie diese etwas tun Das Problem ist, dass meine Werte als Integer mit diesem Ansatz gespeichert werden. Aber ich möchte das Datum formatieren.

Antwort

1

Ich weiß, man konnte die ganze rohe Abfrage:

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

Oder könnte dies funktionieren (ungetestet und könnte funktionieren nicht):

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

Vielleicht könnten Sie etwas wie folgt verwenden :

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

Dann Ausgabe so:

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