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

Laravel中移除发布超30天博客文章的‘new’标签问题

问题分析与解决方案

原代码失效的核心问题有两个:

  • 循环内重复查询整个post表,判断的是是否存在任意一篇超过30天的文章,而非当前循环的这篇文章是否超时
  • DATEDIFF(created_at, now())的参数顺序搞反了,这个函数返回第一个日期减第二个日期的天数,正常发布的文章created_at早于now,结果会是负数,永远满足不了>30的条件

正确写法(Laravel 推荐方式)

直接利用Eloquent模型自带的Carbon日期对象判断,简洁高效:

@foreach ($post as $p)
    <div class="post-title">
        {{ $p->title }}
        {{-- 仅当发布时间不超过30天时显示new标签 --}}
        @if ($p->created_at->diffInDays(now()) <= 30)
            <img src="{{ asset('assets/new.gif') }}" alt="New">
        @endif
    </div>
@endforeach

备选方案(如果$post是数组而非模型实例)

如果你的$post是DB查询返回的数组(不是Eloquent模型),需要先把日期字符串转成Carbon对象:

@foreach ($post as $p)
    <div class="post-title">
        {{ $p['title'] }}
        @if (\Carbon\Carbon::parse($p['created_at'])->diffInDays(now()) <= 30)
            <img src="{{ asset('assets/new.gif') }}" alt="New">
        @endif
    </div>
@endforeach

关键注意点

  • 确认asset('assets/new.gif')路径正确,对应项目中GIF文件的实际位置
  • 别在循环里执行DB查询(原代码的\DB::table('post')->whereRaw(...)),会产生大量重复查询,拖慢页面性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:22:06