我有一个简单的博客系统,我想在侧边栏中显示一个存档,显示所有月份&博客文章的年份。博客文章有一个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`'),
]);
问题是我的值是用这种方法保存为整数的。但我想格式化日期。
答案 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