Laravel内部应用包中Seeder无法运行的问题及解决方法
Laravel自定义包Seeder无法加载问题排查与解决
我正在为内部Laravel应用开发自定义包,遇到了无法运行包目录下Seeder的问题。
包目录为packages/vendor/packagename,其composer.json中配置的自动加载规则如下:
"autoload": { "psr-4": { "Vendor\\PackageName\\": "src/", "Vendor\\PackageName\\Database\\Factories\\": "database/factories/", "Vendor\\PackageName\\Database\\Seeders\\": "database/seeders/" } },
我在路径packages/vendor/packagename/database/seeders/DepartmentSeeder.php下创建了Seeder文件,代码如下:
<?php namespace Vendor\PackageName\Database\Seeders; use Illuminate\Database\Seeder; use Vendor\PackageName\Models\Department; class DepartmentSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Department::factory()->count(10)->create(); } }
尝试运行以下命令执行Seeder:
$ php artisan db:seed --class="Vendor\\PackageName\\Database\\Seeders\\DepartmentSeeder"
却收到报错:
Target class [Vendor\PackageName\Database\Seeders\DepartmentSeeder] does not exist.
如果将seeders目录移到src目录下,运行以下命令可正常工作,但我希望将seeders保留在database目录中:
$ php artisan db:seed --class="Vendor\\PackageName\\seeders\\DepartmentSeeder"
解决方案
在这个案例中,composer dump-autoload并未解决问题,最终通过运行composer update vendor/packagename解决了该问题,希望能帮助遇到类似问题的开发者。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

