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

时间:2016-04-22 06:46:38

标签: php laravel laravel-5.2 php-carbon

我有一个简单的博客系统,我想在侧边栏中显示一个存档,显示所有月份&博客文章的年份。博客文章有一个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>
如果blogposts具有相同的Month&amp;年。我如何获得独特的月份和时间年+我可以根据那个月或一年进行排序并获得多个帖子吗?因为如果我得到唯一值,当我过滤结果时,我可能只会收到1个帖子。

更新 你可以做这样的事情

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

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

3 个答案:

答案 0 :(得分: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 :(得分: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>

答案 2 :(得分:0)

这对我有用。

查询:

$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