Search code examples
phplaravellaravel-8laravel-11

Target class [Modules\Orders\Database\Seeders\OrdersSeeder] does not exist in Laravel Seed


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?


Solution

  • 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
    

    Issue with your directory naming:

    I noticed a mistake in your directory naming modules/Orders/database/seeders/OrdersSeeder.php. It should be modules/Orders/Database/Seeders/OrdersSeeder.php