Laravel Seed生成报错:寻找复数表名testms,实际表为testm
解决Laravel Seed时寻找复数表名的问题
嘿,这问题我太熟了!Laravel的Eloquent ORM默认会把模型名复数化来匹配数据库表名,所以你的Testm模型会自动去找testms表,但你的实际表名是testm,这就导致了报错。下面给你几个靠谱的解决办法:
方法1:在模型中手动指定表名(最推荐)
直接在App\Testm.php模型里添加$table属性,强制指定对应的表名:
namespace App; use Illuminate\Database\Eloquent\Model; class Testm extends Model { // 手动绑定单数表名 protected $table = 'testm'; }
改完之后再重新运行seed命令:
php artisan db:seed --class=TestmTableSeeder
方法2:修改数据库表名符合Laravel规范
如果你不想改模型代码,可以把数据库里的testm表重命名为testms,这样就贴合Laravel的默认约定,不用额外配置。
方法3:全局修改复数化规则(不推荐)
除非你所有表都是单数命名,否则不建议这么做。可以在app/Providers/AppServiceProvider.php的boot方法里自定义复数化逻辑:
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; public function boot() { Schema::defaultStringLength(191); // 自定义复数化规则,针对testm特殊处理 Str::pluralUsing(function ($word) { if ($word === 'testm') { return 'testm'; // 保持单数 } return Str::plural($word); }); }
这个方法会影响全局所有模型的表名生成,所以谨慎使用。
内容的提问来源于stack exchange,提问作者riten
相关产品推荐
相关产品推荐

