当我运行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);

    }

}

当前回答

如果你迁移到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

其他回答

我是这样解决的:

复制文件内容。 删除文件。 运行命令:php artisan make:seeder。 将文件内容复制回此文件中。

发生这种情况是因为我更改了文件名。我不知道为什么改动之后就不管用了。

您需要将SongsTableSeeder放入与DatabaseSeeder.php文件相同的目录中的SongsTableSeeder.php文件中。

你需要在你的控制台运行:

composer dump-autoload

生成新的类映射,然后运行:

php artisan db:seed

我刚刚测试过。它在Laravel 5中没有任何问题

我得到[ReflectionException]类种子也不存在,当我使用composer dump-autoload时,我得到了一个错误preg_match(): JIT编译失败:当我运行它时没有更多的内存。

我所做的就是改变。Jit =1到pcre。jit=在php.ini中关闭! 你可以在你的终端中使用php——ini找到路径!

我使用mac与php 7.3!希望这能帮助到在座的各位!

我有同样的“反射异常”错误。解决方案是将类文件从dev复制到服务器。愚蠢的错误,但是考虑到我们处理了多少文件,每次都很容易忘记将它们复制到服务器上。

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

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