Laravel8调用VehicleModel未定义方法getVehicleModelsByMake报错如何解决
问题解决方案
报错根本原因
你在App\Models\VehicleModel模型中定义的查询方法名为getModelsByMake,但控制器中调用的方法名为getVehicleModelsByMake,二者名称不匹配,因此Laravel无法找到对应方法,抛出BadMethodCallException异常。
修复方法
两种方案二选一即可,核心是保证模型方法名和控制器调用的名称统一:
- 方案1:修改控制器调用的方法名,和模型定义保持一致
找到控制器getVehicleModelsByMake方法中的调用行,修改为:
$vehiclemodels = $this->myvehiclemodel->getModelsByMake($id);
- 方案2:修改模型的方法名,和控制器调用保持一致
将VehicleModel模型中的方法名改为getVehicleModelsByMake:
public function getVehicleModelsByMake($id) { $vehiclemodels = DB::table('vehicle_models')->where('make_id',$id)->get(); return $vehiclemodels; }
可选优化建议
你已经在模型中定义了关联关系,无需手动用DB门面查询,用Eloquent关联写法代码更符合Laravel规范:
- 先在VehicleMake模型中定义一对多关联:
public function vehicleModels() { return $this->hasMany(VehicleModel::class, 'make_id'); }
- 控制器中直接通过关联查询即可,无需自定义查询方法:
$vehiclemodels = VehicleMake::findOrFail($id)->vehicleModels;
内容的提问来源于stack exchange,提问作者user11352561
相关产品推荐
相关产品推荐

