Laravel 5 - 工匠种子[ReflectionException]类SongsTableSeeder不存在

Sas*_*sha 239 laravel composer-php laravel-5 artisan

当我运行php artisan db:seed我收到以下错误:

[ReflectionException] Class SongsTableSeeder does not exist
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

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

}
Run Code Online (Sandbox Code Playgroud)

我的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);

    }

}
Run Code Online (Sandbox Code Playgroud)

Mar*_*łek 655

您需要将SongsTableSeeder文件存入SongsTableSeeder.php您的DatabaseSeeder.php文件所在的目录中.

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

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

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

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

我刚试过它.它在Laravel 5中没有问题

  • `composer dump-autoload`为我做了伎俩.谢谢. (80认同)
  • Not working for me,still getting the `Reflection exception`. (4认同)
  • @LuísAlmeida`dump-autoload`重新生成项目中需要包含的所有类的列表,当项目中有新类时将使用该列表。通常运行`make:*`会添加新创建的类,但是如果您手动创建一个播种器,则不会发生这种情况。至少这就是我从5分钟的搜索中就能理解的原理。我不是专家。 (3认同)
  • `composer dumpautoload` 也飞起来了 (2认同)
  • 我在开发服务器上使用 Laravel 5.8 尝试了这个解决方案,“composer dump-autoload”对我有用。 (2认同)

Ron*_*onk 16

我解决了这个问题:

  1. 复制文件内容.
  2. 删除文件.
  3. 运行命令:php artisan make:seeder.
  4. 将文件内容复制回此文件中.

发生这种情况是因为我对文件名进行了更改.我不知道为什么改变之后它不起作用.

  • 可能运行作曲家dump-auto比较容易。自动装带器现在正在寻找较旧的文件。因此,如果通过命令行转储此文件,它将使用新文件生成一个新的自动加载器文件。所以将来尝试这个=) (2认同)

sim*_*eco 13

文件SongsTableSeeder.php应位于database/seeds目录或其子目录中.

你需要运行:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

然后:

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

要么:

php artisan db:seed --class=SongsTableSeeder
Run Code Online (Sandbox Code Playgroud)


pab*_*ros 10

如果迁移到Laravel 8,则必须namespaceseeders类中添加一个:

<?php

namespace Database\Seeders;

...
Run Code Online (Sandbox Code Playgroud)

接下来,在您的composer.json文件中,classmap从该autoload部分中删除块并添加新的命名空间类目录映射:

<?php

namespace Database\Seeders;

...
Run Code Online (Sandbox Code Playgroud)

最后,做一个composer dump-autoload

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


小智 5

SongsTableSeeder.php 应该在 database/seeds 目录中

控制台命令步骤:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

进而:

php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

进而:

php artisan optimize
Run Code Online (Sandbox Code Playgroud)

进而:

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

或者:

php artisan db:seed --class=SongsTableSeeder
Run Code Online (Sandbox Code Playgroud)