显示独特的月份和年份的帖子 + 过滤它们 - Laravel 5.2
Showing unique Months & years of posts + filter them - Laravel 5.2
我有一个简单的博客系统,我想在边栏中显示一个存档,它显示了博客的所有月份和年份post。博客posts 在数据库中有一个 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>
如果博客post具有相同的月份和年份,我显然会得到重复的值。我如何获得唯一的月份和年份 + 我能否根据该月份或年份进行排序并获得多个 posts?因为如果我得到唯一值,我在过滤结果时可能只会得到 1 post。
更新:
你可以这样做
$dates = DB::table('blogposts')
->distinct()
->orderBy('created_at')
->get([
DB::raw('YEAR(`created_at`) AS `year`'),
DB::raw('MONTH(`created_at`) AS `month`'),
]);
问题是我的值是用这种方法保存为整数的。但我想格式化日期。
我知道你可以 运行 整个原始查询:
$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();
也许你可以使用这样的东西:
$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>
这对我有用。
查询:
$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
我有一个简单的博客系统,我想在边栏中显示一个存档,它显示了博客的所有月份和年份post。博客posts 在数据库中有一个 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>
如果博客post具有相同的月份和年份,我显然会得到重复的值。我如何获得唯一的月份和年份 + 我能否根据该月份或年份进行排序并获得多个 posts?因为如果我得到唯一值,我在过滤结果时可能只会得到 1 post。
更新: 你可以这样做
$dates = DB::table('blogposts')
->distinct()
->orderBy('created_at')
->get([
DB::raw('YEAR(`created_at`) AS `year`'),
DB::raw('MONTH(`created_at`) AS `month`'),
]);
问题是我的值是用这种方法保存为整数的。但我想格式化日期。
我知道你可以 运行 整个原始查询:
$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();
也许你可以使用这样的东西:
$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>
这对我有用。
查询:
$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