Laravel 8 Tinker调用User的stories关联提示App\Story类未找到
报错根源定位
- 关联关系里的模型命名空间和实际项目路径完全不匹配
你在Tinker中是通过App\Models\User::find(1)获取用户实例的,说明你的所有模型都存放在app/Models/目录下,对应类的根命名空间为App\Models。但你写关联关系时,所有引用模型的位置都少了Models层级:- User模型的
stories方法里写的\App\Story::class,指向的是app/Story.php下的类,不是你实际放在app/Models/Story.php的Story模型,框架加载不到对应类,就会抛出Class "App\Story" not found的错误 - Story模型的
user方法里写的App\User::class,同样缺失Models层级,就算修好第一个报错,这个位置后续也会触发同类的类找不到问题
- User模型的
- 语法细节问题:写PHP全限定类名时如果不加开头的反斜杠,系统会按照当前文件的命名空间自动拼接解析路径,就算路径写对,也会因为拼接错误导致类加载失败
修正后的关联代码
- User模型中的
stories关联方法:
public function stories() { // 路径对齐实际模型位置,加开头反斜杠避免命名空间自动拼接错误 return $this->hasMany(\App\Models\Story::class); }
- Story模型中的
user关联方法:
public function user() { // 补全Models层级的命名空间路径 return $this->belongsTo(\App\Models\User::class); }
验证流程
修改代码后不需要重启本地服务,直接回到Tinker执行验证:
- 先确认模型可以被正常解析加载:
$storyModel = new \App\Models\Story;
没有抛出类找不到的错误,就说明路径配置正确
2. 再执行之前获取关联数据的代码:
$user1->stories
即可正常返回当前用户关联的所有stories数据集合
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

