如何在Laravel中不将user_id加入$fillable插入认证用户ID并解决报错
问题排查与修复方案
1. 优先检查Auth配置文件
打开项目config/auth.php文件,找到providers配置项,确认users驱动的model路径是否正确:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ],
这是你遇到"Undefined method stories"报错的最常见原因:Laravel 8默认用户模型路径为App\Models\User::class,如果你的项目是从低版本升级、或者手动修改过配置,此处可能还是旧的App\User::class,导致auth返回的用户实例不是你定义了stories关联的模型类,自然找不到对应方法。
2. 修复Story模型的关联定义错误
你当前Story模型里的user关联写法有误,类名首字母要大写:
// 原错误写法 public function user(){ return $this->belongsTo(user::class); } // 修改为 public function user(){ return $this->belongsTo(User::class); }
该问题暂时不会触发当前报错,但后续调用反向关联时会出现异常,建议一并修复。
3. 清理多余代码
你在store方法中用关联创建Story时,不需要手动传入user_id,关联方法会自动填充该字段,而且你的$fillable也没有允许user_id批量赋值,直接删掉对应行即可:
auth()->user()->stories()->create([ 'title' => $request->title, 'body' => $request->body, 'type' => $request->type, 'status' => $request->status, ]);
4. 可选校验
如果修改完配置还是报错,可以在store方法最前面加一行临时调试代码,确认返回的用户类是否正确:
dd(get_class(auth()->user()));
正常输出应该是App\Models\User,如果输出其他内容,就说明auth的用户实例来源不对,再对应排查即可。
内容的提问来源于stack exchange,提问作者Arsalan Khan
相关产品推荐
相关产品推荐

