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

Laravel Call to a member function load() on null 作者文章报错

报错原因

两个报错的核心触发点共3处:

  • User模型的文章关联定义错误:一对多关联方法命名为单数post(),但路由中调用的是复数形式的动态属性$author->posts,Laravel无法匹配到对应关联,直接返回null,对null调用load()方法就触发Call to a member function load() on null错误。
  • 路由中传给视图的posts变量为null,视图层遍历null值时触发foreach() argument must be of type array|object, null given错误。
  • 路由里的title字段使用单引号包裹字符串,单引号内的PHP变量不会被解析,最终页面标题会直接显示$author->name字面量,无法输出真实作者名。
  • 额外冗余操作:Post模型已经配置protected $with = ['category', 'author'];,全局自动预加载分类、作者关联,不需要额外调用load()方法做预加载。
修复方案

按以下顺序修改代码即可:

  1. 修正User模型的关联定义,一对多关联使用复数命名,匹配调用逻辑:
// User模型中修改关联方法
public function posts(){
    return $this->hasMany(Post::class);
}
  1. 修正路由闭包代码,去掉冗余load调用,修正字符串解析问题,对齐首页文章排序逻辑:
Route::get('/authors/{author:username}', function(User $author){
    return view('frontend.posts', [
        'title' => "Post By Author : {$author->name}",
        'posts' => $author->posts()->latest()->get(),
    ]);
});

说明:调用posts()方法触发查询,加latest()保证文章按发布时间倒序排列,和PostController首页的排序规则保持一致;Post模型全局自动预加载配置会自动带上分类、作者关联,不会出现N+1查询问题。

效果验证

修改完成后:

  • 路由模型绑定会自动根据传入的username参数匹配对应作者,匹配失败自动返回404页面
  • 可以正确拿到指定作者名下的所有文章集合,不会返回null
  • 视图层可以正常遍历文章集合,渲染文章标题、摘要、分类、作者信息
  • 页面标题会正确显示当前作者的名称,不会出现变量字面量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:39:32