Laravel 5 – 手工种子类SongsTableSeeder不存在

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

你需要把SongsTableSeeder放到你的DatabaseSeeder.php文件所在的同一目录下的SongsTableSeeder.php文件中。

你需要在控制台中运行:

 composer dump-autoload 

生成新的class级地图,然后运行:

 php artisan db:seed 

我刚刚testing过。 它在Laravel 5中没有问题

我通过这样做解决了这个问题:

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

这是因为我改变了文件名。 我不知道改变之后为什么不行。

我正在运行最新的Laravel 5 dev版本,如果您更改了名称空间,则需要像这样调用您的种子类:

 $this->call('\todoparrot\TodolistTableSeeder'); 

显然你需要用你指定的命名空间replacetodoparrot 。 否则,我会收到原始问题中指出的相同错误。

文件SongsTableSeeder.php应该在数据库/种子目录或其子目录中。

你需要运行:

 composer dump-autoload 

接着:

 php artisan db:seed 

要么:

 php artisan db:seed --class=SongsTableSeeder 

如果我们的CustomTableSeeder与DatabaseSeeder在同一个目录中,我们应该使用如下:

 $this->call('database\seeds\CustomTableSeeder'); 

在我们的DatabaseSeeder文件中; 那么将会抛出另一个错误:'DB Class not found',那么我们应该把我们的数据库外观添加到我们的CustomTableSeeder文件中,如下所示:

 use Illuminate\Support\Facades\DB; 

它为我工作!

我只用了两个类的SINGLE FILE如下:

 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)]); } } } 

我有相同的“reflectionexception”错误。 解决的办法是把类文件复制到dev的服务器上。 愚蠢的错误,但鉴于我们处理了多less文件,它很容易忘记每次复制到服务器。