我正在开发一个 Laravel 项目,在该项目中我创建了一个用于处理订单的自定义模块。我的播种机类 OrdersSeeder 位于
modules/Orders/database/seeders/OrdersSeeder.php
。这是我的播种者课程:
<?php
namespace Modules\Orders\Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class OrdersSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}
我在位于
DatabaseSeeder
的 database/seeders/DatabaseSeeder.php
班级中引用了该播种机,如下所示:
<?php
namespace Database\Seeders;
use App\Models\User;
use Modules\Orders\Database\Seeders\OrdersSeeder;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
OrdersSeeder::class
]);
}
}
但是,当我运行 php artisan db:seed 时,遇到以下错误:
Illuminate\Contracts\Container\BindingResolutionException
Target class [Modules\Orders\Database\Seeders\OrdersSeeder] does not exist.
我已经仔细检查了命名空间和文件路径,一切似乎都是正确的。可能是什么原因导致此问题?如何解决?
您的 Laravel 应用程序无法识别您的
modules
目录。如果您进入 composer.json
文件。你会看到类似这样的代码:
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
}
在这里您必须注册您的
modules
目录。即
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Molules\\": "modules/",
},
}
注意:我想你的
目录名称是小写的。modules
进行这些更改后,运行以下命令:
php artisan dump-autoload