Laravel生产环境报错:Class 'App\Models\review'未找到,本地正常
问题原因与解决方案
核心原因
- Linux系统大小写敏感性:本地开发环境(Windows/macOS)的文件系统不区分大小写,而DigitalOcean的服务器基于Linux,文件名和类名严格区分大小写。你的查询里用了小写的
review,本地能自动匹配到Review类,但Linux下找不到对应的小写类文件。执行Review::all()会手动加载Review类到内存,后续查询就能从内存中找到该类,因此不再报错。 - 类加载缓存问题:生产环境通常会执行
php artisan optimize生成类映射缓存,缓存里记录的是App\Models\Review的映射关系,但你的查询尝试加载App\Models\review,缓存中没有这个条目,导致找不到类。手动执行Review::all()会绕过缓存加载类,之后内存中存在该类实例,查询就能正常运行。
解决方案
- 修正模型关联的类引用:检查Movie模型中的关联方法,确保使用正确的类名或完整命名空间,避免小写字符串引用。示例:
同时查询语句需对应调整为// Movie模型中正确的关联写法(一对多场景) public function reviews() { // 使用类常量引用,彻底避免大小写问题 return $this->hasMany(\App\Models\Review::class); }Movie::has('reviews')->with('reviews.user')->get();(关联方法名要和定义完全一致)。 - 清理并重建生产环境缓存:在DigitalOcean服务器上执行以下命令:
php artisan optimize:clear # 若需要重新生成优化缓存,再执行 php artisan optimize - 验证文件名与类名一致性:确保
Review模型的文件名是Review.php(首字母大写),和类定义class Review extends Model完全匹配,Linux系统下文件名大小写必须严格对应。
内容的提问来源于stack exchange,提问作者Bufer
相关产品推荐
相关产品推荐

