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

Laravel 5.5使用whereYear方法报错不存在,新闻年月搜索功能故障求助

解决Laravel 5.5中whereYear方法不存在的问题

嘿,我来帮你搞定这个问题!你遇到的method whereYear does not exist错误,核心原因是调用方法的顺序错了——你先执行了paginate(6),这时候返回的是LengthAwarePaginator实例(已经是分页后的结果集合),而不是查询构造器,自然没法调用whereYear这类查询构造器的方法。

Laravel 5.5本身是支持whereYear和whereMonth的,只要调整代码逻辑,先构建查询条件,再执行分页就可以了。正确的写法如下:

// 先初始化查询构造器,此时还未执行SQL
$query = News::query();

// 根据年份和月份的条件,逐步添加查询约束
if ($year !== null && $month !== null) {
    $query->whereYear('created_at', $year)
          ->whereMonth('created_at', $month);
} elseif ($year !== null) {
    $query->whereYear('created_at', $year);
} elseif ($month !== null) {
    $query->whereMonth('created_at', $month);
}

// 最后执行分页,生成最终结果
$news = $query->paginate(6);

简单拆解下逻辑:

  • 先通过News::query()拿到查询构造器实例,这一步只是准备好查询的“蓝图”,还没真正执行SQL;
  • 根据你的条件判断,给查询构造器添加对应的时间筛选约束;
  • 最后调用paginate(6)执行查询并返回分页结果,这时候才会触发SQL语句的执行。

这样调整后,就不会再出现方法不存在的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:42:32