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

Laravel调用get_one()遇FatalThrowableError:在null上调用成员函数

问题解决:Call to a member function get_one() on null

这个错误和Auth完全无关,你修改Auth的代码没用,核心问题是$this->UserRepository没有被实例化,是null值。给你几个可行的解决办法:

方法1:构造函数依赖注入(Laravel推荐方式)

首先在控制器顶部引入UserRepository的命名空间(根据你实际的文件路径调整,比如仓库在App/Repositories目录下):

use App\Repositories\UserRepository;

然后在控制器中添加构造函数,让Laravel自动完成仓库的实例化:

protected $UserRepository;

public function __construct(UserRepository $userRepo)
{
    $this->UserRepository = $userRepo;
}

这样后续调用$this->UserRepository->get_one()就不会出现null的情况了。

方法2:手动实例化仓库类

如果不想用依赖注入,也可以直接在代码中手动实例化仓库:

// 先引入命名空间
use App\Repositories\UserRepository;

// 替换原来获取user的代码行
$userRepo = new UserRepository();
$user = $userRepo->get_one(Auth::user()->id);

不过这种方式如果仓库类本身有依赖(比如依赖User模型),可能需要你手动处理依赖关系,不如构造注入省心。

额外优化:直接通过Auth获取当前用户

其实完全没必要通过仓库查询当前用户,Laravel的Auth门面可以直接获取:

$user = Auth::user();

把原来的$user = $this->UserRepository->get_one(Auth::user()->id);替换成这行,代码更简洁,还能绕开仓库的问题。

另外可以顺便检查下你的UserRepository里的get_one方法是否正确实现,比如:

public function get_one($id)
{
    return \App\Models\User::find($id);
    // 或者用findOrFail,找不到用户时直接抛出异常
    // return \App\Models\User::findOrFail($id);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:35:14