【问题标题】:Showing unique Months & years of posts + filter them - Laravel 5.2显示独特的几个月和几年的帖子+过滤它们 - Laravel 5.2
【发布时间】:2021-04-28 13:50:59
【问题描述】:

我有一个简单的博客系统,我想在侧边栏中显示一个存档,其中显示博客帖子的所有月份和年份。博文在数据库中有一个 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>

如果博客帖子具有相同的月份和年份,我显然会得到重复的值。我如何获得独特的月份和年份 + 我能否根据该月份或年份进行排序并获得多个帖子?因为如果我得到唯一值,当我过滤结果时,我可能只会得到 1 个帖子。

更新: 你可以这样做

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

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

【问题讨论】:

    标签: php laravel laravel-5.2 php-carbon


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

      也许你可以使用这样的东西:

      $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>
      

      【讨论】:

        【解决方案3】:

        这对我有用。

        查询:

        $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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-03
          • 1970-01-01
          • 2016-11-17
          • 1970-01-01
          • 2021-08-31
          • 2011-09-06
          相关资源
          最近更新 更多