Laravel后端报Target class [0]不存在及非数值警告错误如何解决
问题排查与解决方案
核心触发错误点
你遇到的Target class [0] does not exist和非数值警告,直接原因是关联数组语法错误,Laravel容器在解析参数时把索引数组的数字键当成了类名查找,同时进行数值运算时触发非数值警告。
需修改的代码清单
1. 修复DatabaseController的update数组语法错误
定位到DatabaseController的confirmStaffDatabase方法,将update参数里的逗号替换为关联数组箭头=>:
错误代码:
$result=$database->update([ 'uploadable_id',auth()->user()->id, 'uploadable_type','App\Models\User' ]);
修改为:
$result=$database->update([ 'uploadable_id' => auth()->user()->id, 'uploadable_type' => 'App\Models\User' ]);
2. 修复私有方法调用错误
DatabaseController的saveDatabase方法调用类内私有方法getFile时缺少$this->标识:
错误代码:
$path=getFile($request);
修改为:
$path = $this->getFile($request);
3. 修复响应函数拼写错误
confirmStaffDatabase方法中响应函数拼写错误:
错误代码:
return respone()->json('عملیات موفقانه انجام شد');
修改为:
return response()->json('عملیات موفقانه انجام شد');
4. 补全User模型命名空间导入
DatabaseController和EmployeeController中都使用了User模型,但没有导入对应的命名空间,需要在两个控制器的顶部添加:
use App\Models\User;
可选优化点
DatabaseController的getLastDatabase方法中,如果查询到的用户没有关联数据库,调用max()->id会抛出空对象错误,建议增加非空判断:
private function getLastDatabase(){ $company=auth()->user()->company; $users=User::with('databases')->where([['company',$company],['role','user']])->get(); $lastDb = $users->map(function($item){ return $item->databases->last(); })->filter()->max(); if (!$lastDb) { abort(404, '没有可用的数据库'); } return Database::find($lastDb->id); }
修改完成后执行php artisan route:clear清空路由缓存即可正常运行。
内容的提问来源于stack exchange,提问作者NA Mah
相关产品推荐
相关产品推荐

