Laravel按年和月生成档案

时间:2016-02-08 21:10:24

标签: php mysql laravel-4 eloquent

我现在可以使用Laravel 4.2以档案系统(列表)年份和月份恢复我的文章。

我设法每年和每月检索我的项目没有问题(见下文)

这是我的控制器使用Query builder Laravel

public function index(){
 $post_links = DB::table('posts')
          ->select(DB::raw('YEAR(created_at) year, MONTH(created_at) month, MONTHNAME(created_at) month_name, COUNT(*) post_count'))
          ->groupBy('year')
          ->groupBy('month')
          ->orderBy('year', 'desc')
          ->orderBy('month', 'desc')
          ->get();

          return View::make('home.index')->with(array(
          'post_links'=>$post_links,

      ));
}

我的观点

 <ul id="show-year">
                @foreach($post_links as $link)
                {{--{{dd($link)}}--}}
                 {{--Show year--}}
                     <li>
                          <a title="" href="#">
                              <span>
                                <strong>{{$link->year}}</strong></a>&nbsp;<span class="post-count">{{$link->post_count}}</span><i class="fa fa-arrow-right"></i>
                              </span>
                              </li>
                          </a>
                          {{--show month--}}
                          <ul id="show-month">
                            <li class="month-content">
                               <a href="">
                                  <span>
                                    <strong>{{$link->month_name}}</strong>
                                  </span>
                            </a>
                            </li>
                          </ul>
                       </li>
                @endforeach
        </ul>

我几年和几个月都恢复了我的数据,但每个月都会以这种方式为她增加一年

2015(21) - 五月(2) - 四月(3) - 三月(5) - 二月(1) - 一月(10) 2016(10) - 十二月(6) - 十一月(4)

我不明白为什么它不会在同一年对我进行分组,并且每次每个月都有一个新的年份,我就会产生这种情况。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

为了在某种导航面板中生成链接,您可以在数据库端执行大部分处理,而不是使用像这样的查询获取所有博客帖子记录

SELECT YEAR(created_at) year,
       MONTH(created_at) month,
       MONTHNAME(created_at) month_name,
       COUNT(*) post_count
  FROM post
 GROUP BY year, MONTH(created_at)
 ORDER BY year DESC, month DESC;

输出:

| YEAR | MONTH | MONTH_NAME | POST_COUNT |
------------------------------------------
| 2013 |     5 |        May |          5 |
| 2013 |     4 |      April |          3 |
| 2013 |     3 |      March |          4 |
| 2013 |     2 |   February |          3 |
| 2013 |     1 |    January |          2 |
| 2012 |    12 |   December |          2 |
| 2012 |    11 |   November |          3 |

像这段代码

  $links = DB::table('post')
        ->select(DB::raw('YEAR(created_at) year, MONTH(created_at) month, MONTHNAME(created_at) month_name, COUNT(*) post_count'))
        ->groupBy('year')
        ->groupBy('month')
        ->orderBy('yea`enter code here`r', 'desc')
        ->orderBy('month', 'desc')
        ->get();

原始解决方案是here