当我运行php artisan db:seed时,我得到以下错误:

[ReflectionException] Class SongsTableSeeder does not exist

这是怎么回事?

我的DatabaseSeeder类:

<?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');
    }

}

我的SongsTableSeeder类:

<?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);

    }

}

当前回答

不要忘记,作曲家dump-autoload作品与自动加载的关系 json的/ classmap部分。如果您需要更改种子器目录或使用多个目录存储种子器,请注意这一点。

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},

其他回答

当你将你的项目迁移到Laravel 8时,你会得到这个错误,然后你应该遵循下面给出的一些步骤。

1.去找你的作曲家。json文件。

2.改变自动装填部分

"autoload": {
    "psr-4": {
        "App\\": "app/",
         "Database\\Factories\\": "database/factories/",
         "Database\\Seeders\\": "database/seeders/"
     }
 },

to

"autoload": {
     "psr-4": {
         "App\\": "app/"
      },
      "classmap": [
         "database/seeds",
         "database/factories"
      ]
},

3.现在运行composer dump-autoload或composer update命令

4.最后运行php artisan db:seed命令

您可能指定了.php扩展名,但它没有找到您的类。

我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

解决我问题的方法是: 我在做什么:

php artisan db:seed --class=RolesPermissionsTableSeeder

如果你迁移到Laravel 8,你必须给种子类添加一个命名空间:

<?php

namespace Database\Seeders;

...

接下来,在您的作曲家。Json文件,从自动加载部分删除classmap块,并添加新的命名空间类目录映射:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Seeders\\": "database/seeds/"
    }
},

最后,做一个作曲家转储-自动加载。

欲了解更多信息: https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces

我只使用了一个文件和两个类在它下面:

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\Lesson;

use Faker\Factory as Faker;

class DatabaseSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    //Lesson::truncate();

    Model::unguard();

    $this->call("LessonsTableSeeder");


}

}

class LessonsTableSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{

    $faker = Faker::create();

    foreach(range(1,30) as $index) {

        Lesson::create(['title' => $faker->sentence(5), 'body' => $faker->paragraph(4)]);

    }

}

}

php应该在database/seeds目录下

控制台命令步骤:

composer dump-autoload

然后:

php artisan cache:clear

然后:

php artisan optimize

然后:

php artisan db:seed

or:

php artisan db:seed --class=SongsTableSeeder