Laravel8报1146错误表batter_firsts不存在,实际建表为batterfirst如何解决
问题原因
Laravel 的 Eloquent 模型有默认命名规则:会自动将驼峰格式的模型名转换为蛇形复数格式,作为对应绑定的数据库表名。你的模型名为 BatterFirst,Laravel 自动转换后的表名为 batter_firsts,但你迁移文件实际创建的表名为 batterfirst,两者不匹配,所以触发表不存在的报错。
解决方案
你可以选择任意一种方式解决:
- 方案1(无需修改数据库,优先推荐):在
BatterFirst模型中手动指定绑定的表名
修改app/Models/BatterFirst.php代码,添加$table属性:
class BatterFirst extends Model { use HasFactory; // 手动指定对应表名 protected $table = 'batterfirst'; protected $fillable = [ 'name', 'runs', 'balls', 'sixs', 'fours' ]; }
- 方案2(符合 Laravel 官方命名规范):修改迁移文件表名
如果你希望遵循 Laravel 默认规则,可以修改迁移文件中的表名,删除原有表后重新执行迁移:
// 将原来的 batterfirst 改为 Laravel 自动生成的 batter_firsts Schema::create('batter_firsts', function (Blueprint $table) { $table->id(); $table->string('name'); $table->integer('runs'); $table->integer('balls'); $table->integer('sixs'); $table->integer('fours'); $table->timestamps(); });
修改后执行 php artisan migrate:fresh 即可生成对应表,注意该操作会清空数据库所有原有数据。
其他注意问题
你的代码还存在两处隐藏问题,修复表名后可能会触发,建议同步修改:
- 控制器的
show、edit方法中,参数名为$batterFirst,但compact传入的是batterfirst,大小写不匹配会导致视图变量不存在。需要修改为:
public function show(BatterFirst $batterFirst) { return view('BatterFirst.show',compact('batterFirst')); } public function edit(BatterFirst $batterFirst) { return view('BatterFirst.edit',compact('batterFirst')); }
- 首页视图
index.blade.php中输出了$value->overs,但你的表中没有overs字段,需要删除该行或者在迁移中添加对应字段。
内容的提问来源于stack exchange,提问作者Shahed Khan
相关产品推荐
相关产品推荐

