Laravel:migrate命令支持文件夹吗?为何文件夹内迁移未执行?
解决Laravel自定义迁移文件夹无法自动执行的问题
问题原因
Laravel默认仅自动扫描database/migrations根目录下的迁移文件,不会识别子文件夹,因此你在database/migrations/<MyFolderName>中创建的迁移无法被默认的migrate命令检测到。
解决方案(永久生效,无需每次指定路径)
修改app/Providers/AppServiceProvider.php文件,在boot方法中注册额外的迁移路径,让Laravel自动扫描你的自定义文件夹:
<?php namespace App\Providers; use Illuminate\Database\Migrations\Migrator; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. */ public function boot(): void { // 注册默认迁移目录 + 自定义迁移目录 $this->app->make(Migrator::class)->path([ database_path('migrations'), database_path('migrations/MyFolderName'), // 替换为你的实际子文件夹名称 ]); } // ... 其他原有代码 }
验证与执行
- 执行以下命令查看迁移状态,此时应能看到你新建的迁移文件:
php artisan migrate:status
- 再次执行迁移命令,即可正常运行自定义文件夹内的迁移:
php artisan migrate
额外排查点
- 确认迁移文件命名符合Laravel规范:必须以时间戳开头(你的文件
2022_08_23_090654_create_<whatever>_table已符合要求) - 确认迁移文件中的类名与文件名一致,例如文件名
2022_08_23_090654_create_whatever_table.php对应的类名应为CreateWhateverTable
内容的提问来源于stack exchange,提问作者ODelibalta
相关产品推荐
相关产品推荐

