Laravel 5 - artisan seed [ReflectionException] Class SongsTableSeeder does not exist
When I run php artisan db:seed I am getting the following error:
[ReflectionException] Class SongsTableSeeder does not exist
What is going on?
My DatabaseSeeder class:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call('SongsTableSeeder');
}
}
My SongsTableSeeder class:
<?php
// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use DB;
class SongsTableSeeder extends Seeder {
public function run()
{
$faker = Faker::create();
$songs = [];
foreach(range(1, 10) as $index)
{
$songs[] = ['title' => $faker->words(rand(1,4))];
}
DB::table('songs')->insert($songs);
}
}
Solution 1:
You need to put SongsTableSeeder
into file SongsTableSeeder.php
in the same directory where you have your DatabaseSeeder.php
file.
And you need to run in your console:
composer dump-autoload
to generate new class map and then run:
php artisan db:seed
I've just tested it. It is working without a problem in Laravel 5
Solution 2:
I solved it by doing this:
- Copy the file content.
- Remove file.
- Run command: php artisan make:seeder .
- Copy the file content back in this file.
This happened because I made a change in the filename. I don't know why it didn't work after the change.
Solution 3:
File SongsTableSeeder.php should be in database/seeds directory or in its subdirectory.
You need to run:
composer dump-autoload
and then:
php artisan db:seed
or:
php artisan db:seed --class=SongsTableSeeder
Solution 4:
If you migrated to Laravel 8
, you have to add a namespace
to the seeders
class:
<?php
namespace Database\Seeders;
...
Next, in your composer.json
file, remove classmap
block from the autoload
section and add the new namespaced class directory mappings:
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Seeders\\": "database/seeds/"
}
},
An finally, do a composer dump-autoload
.
For more information: https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces