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
相关产品推荐
相关产品推荐

