Laravel 8 提示Class 'Admin::class' not found错误问题咨询
问题排查及修复方案
错误根因梳理
- 关联定义语法错误:类名常量
::class被错误包裹在引号中,Admin::class本身会返回类的全名字符串,加引号后会被当成普通字符串"Admin::class"查找类,直接触发类不存在报错。 - Laravel 8命名空间变更:Laravel 5默认模型存放在
app/目录,命名空间为App\;Laravel 8开始默认模型存放在app/Models/目录,命名空间为App\Models\,未补全命名空间也会导致类找不到。 - 关联调用不匹配:Administrations模型中定义的关联方法名为
admin(),视图中错误调用为$administration->admins->name,多了后缀s无法匹配关联。 - 外键字段不统一:Administrations模型
$fillable中声明的外键为id_Admin,控制器存储时使用的是id_superAdmin,字段不一致会导致关联查询匹配不到数据。 - 细节语法错误:Admin模型的
users关联定义中User::class多了多余的单引号,控制器中数字类型转换位置错误。
修复后代码
1. 模型代码
Administrations 模型
<?php namespace App\Models; // 确认和你实际模型存放位置的命名空间一致 use Illuminate\Database\Eloquent\Model; class Administrations extends Model { protected $fillable = [ 'name', 'address', 'number', 'id_admin' // 统一外键为小写下划线格式 ]; // 去掉引号,显式指定外键避免自动映射错误 public function admin() { return $this->belongsTo(Admin::class, 'id_admin'); } }
Admin 模型
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Admin extends Model { protected $fillable = [ 'name', 'grade', 'adress', 'number', 'id_user' ]; // 去掉多余引号,显式指定外键 public function user() { return $this->belongsTo(User::class, 'id_user'); } // 去掉多余引号,显式指定外键 public function administrations() { return $this->hasOne(Administrations::class, 'id_admin'); } }
2. 控制器代码
public function storefac(Request $request){ $this->validate($request,[ "name"=> 'required', "number"=>'required', "adress"=>'required', ]); $id=Auth::user()->id; $emps=new Administrations; $emps->name=$request->input('name'); $emps->adress=$request->input('adress'); $emps->number=(int)$request->input('number'); // 修正类型转换位置 $emps->id_admin=$id; // 和模型声明的外键保持一致 $emps->save(); return redirect()->back()->with('success','data saved'); }
3. 视图代码
<thead> <tr> <th scope="col">name</th> <th scope="col">Adress</th> <th scope="col">number</th> <th scope="col">admin name</th> </tr> </thead> <tbody> @if($administrations) @foreach($administrations as $administration) <tr> <th scope="row">{{$administration->name}}</th> <td>{!!$administration->adress!!}</td> <td>{{$administration->number}}</td> <!-- 关联名和模型方法保持一致,加??避免关联不存在时报错 --> <td>{{$administration->admin->name ?? ''}}</td> </tr> @endforeach @endif </tbody>
内容的提问来源于stack exchange,提问作者devswimi
相关产品推荐
相关产品推荐

