I am working on a Laravel project where I have created a custom module for handling orders. My seeder class OrdersSeeder is located in modules/Orders/database/seeders/OrdersSeeder.php
. Here is my seeder class:
<?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
{
//
}
}
I have referenced this seeder in my DatabaseSeeder
class located at database/seeders/DatabaseSeeder.php
as follows:
<?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
]);
}
}
However, when I run php artisan db:seed, I encounter the following error:
Illuminate\Contracts\Container\BindingResolutionException
Target class [Modules\Orders\Database\Seeders\OrdersSeeder] does not exist.
I have double-checked the namespace and the file path, and everything seems correct. What might be causing this issue, and how can I resolve it?
Your Laravel app is unable to recognize your modules
directory. If you go inside the composer.json
file. You will see code something like that:
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
}
Here you will have to register your modules
directory. i.e.
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Modules\\": "modules/",
},
}
Note: I suppose your
modules
directory name is lowercase.
After these changes run the following command:
composer dump-autoload
I noticed a mistake in your directory naming modules/Orders/database/seeders/OrdersSeeder.php
. It should be modules/Orders/Database/Seeders/OrdersSeeder.php