You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期获取上/下一条新闻记录?解决同日多条新闻兼容问题

解决同日期多条新闻时的上下篇获取问题

当前代码仅通过whereDate比较日期,当同一天发布多条新闻时,无法区分同日期内的新闻顺序,导致上下篇数据获取错误。以下是修正后的实现方案:

修正后的代码实现

NewsController.php

public function detail($slug){
    $news = \App\News::active()->where('slug', $slug)->firstOrFail();
    
    // 获取上一条新闻(发布时间更晚/同日期内排序更靠后的)
    $prev_news = \App\News::active()
        ->where(function ($query) use ($news) {
            $query->where('date', '>', $news->date)
                  ->orWhere(function ($subQuery) use ($news) {
                      $subQuery->whereDate('date', '=', $news->date)
                               ->where('id', '>', $news->id);
                  });
        })
        ->orderBy('date', 'desc')
        ->orderBy('id', 'desc')
        ->first();
    
    // 获取下一条新闻(发布时间更早/同日期内排序更靠前的)
    $next_news = \App\News::active()
        ->where(function ($query) use ($news) {
            $query->where('date', '<', $news->date)
                  ->orWhere(function ($subQuery) use ($news) {
                      $subQuery->whereDate('date', '=', $news->date)
                               ->where('id', '<', $news->id);
                  });
        })
        ->orderBy('date', 'desc')
        ->orderBy('id', 'desc')
        ->first();
        
    return view('news.detail', compact('news', 'prev_news', 'next_news'));
}

关键修改说明

  1. 新增嵌套查询逻辑:先判断日期是否大于/小于当前新闻日期;若日期相同,则通过id(自增ID默认对应发布顺序)区分同日期内的新闻顺序。
  2. 双重排序规则:同时按date和id排序,确保同日期内的新闻能按照发布先后正确排列。

自定义调整提示

如果你的新闻模型中,同日期内的排序依赖其他字段(比如精确到时分秒的published_at、自定义排序值sort_order),只需将代码中的id替换为对应字段即可。

内容的提问来源于stack exchange,提问作者Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:01:12