Laravel中Article模型自定义总浏览量求和方法调用报null错误如何解决
问题根因
报错的核心原因是控制器中的文章查询语句写法错误,导致$article变量最终为null,和你封装的getTotalViews方法逻辑无关。
你写的Article::where('id')->first()中,where方法缺少第二个参数(即需要匹配的id具体值),无法命中任何文章数据,而Laravel的first()方法在查询无结果时默认返回null,自然无法调用null上的成员方法。
修复方案
- 首先修正控制器查询逻辑
如果是按主键id查询文章,推荐两种正确写法:
// 写法1:补全where的匹配条件,$id为你要查询的文章id值 $article = Article::where('id', $id)->first(); // 写法2:主键查询直接用find方法更简洁 $article = Article::find($id);
- 增加空场景兜底逻辑
为了避免传入非法id时查询不到数据再次触发同类报错,可以在Blade输出时增加空判断:
{{ optional($article)->getTotalViews() ?? 0 }} Views // Laravel 8+版本也可以用空安全运算符 {{ $article?->getTotalViews() ?? 0 }} Views
可选优化
你封装的统计逻辑可以直接用Laravel自带的访问器实现,不用手动调用方法,使用起来更便捷:
在Article模型中定义访问器:
public function getTotalViewsAttribute() { return $this->views + $this->add_to_views; }
定义完成后可以直接把统计结果当做模型属性调用:
// 控制器中使用 echo $article->total_views; // Blade中输出 {{ $article?->total_views ?? 0 }} Views
内容的提问来源于stack exchange,提问作者chu
相关产品推荐
相关产品推荐

