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中没有问题
我通过这样做解决了这个问题:
- 复制文件内容。
- 删除文件。
- 运行命令:php artisan make:seeder。
- 将文件内容复制回该文件中。
这是因为我改变了文件名。 我不知道改变之后为什么不行。
我正在运行最新的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文件,它很容易忘记每次复制到服务器。